NSMutableArray addObject:给出错误
这是我正在尝试的代码..
但问题是当我第一次加载视图时它起作用..没有给出任何问题..
但是当我尝试再次加载视图并调用此代码时..它给出了错误在 arrMain addObject:
上,
我试图查看它,但没有找到任何东西..
任何人都可以帮忙吗?
NSUserDefaults *ds = [NSUserDefaults standardUserDefaults];
NSMutableArray *arrMain = [ds objectForKey:@"files"];
int i;
if([arrMain count] > 0)
{
i = [arrMain count] + 1;
}
else
{
arrMain = [[NSMutableArray alloc] init];
i = 1;
}
NSLog(@"File Name To Be Saved %d.txt",i);
NSArray *sd = [[NSArray alloc] init];
sd = [dict componentsSeparatedByString:@"/"];
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init];
[dict1 setObject:[sd objectAtIndex:[sd count] - 1] forKey:@"name"];
NSString *OrgFilename = [sd objectAtIndex:[sd count] - 1];
NSArray *extArr = [[NSArray alloc] init];
extArr = [OrgFilename componentsSeparatedByString:@"."];
NSString *flExt = [extArr objectAtIndex:1];
[dict1 setObject:[NSString stringWithFormat:@"%d.txt",i,flExt] forKey:@"filename"];
// *** error happens VVVV
[arrMain addObject:dict1];
// *** error happens ^^^^
[ds setObject:arrMain forKey:@"files"];
[ds synchronize];
Here is the code what I am trying..
but the thing is when I load the view first time it works.. doesn't give any problem..
but when i try to load view again and call this code.. it gives error on arrMain addObject:
I am trying to look over it but don't find anything..
can anyone please help??
NSUserDefaults *ds = [NSUserDefaults standardUserDefaults];
NSMutableArray *arrMain = [ds objectForKey:@"files"];
int i;
if([arrMain count] > 0)
{
i = [arrMain count] + 1;
}
else
{
arrMain = [[NSMutableArray alloc] init];
i = 1;
}
NSLog(@"File Name To Be Saved %d.txt",i);
NSArray *sd = [[NSArray alloc] init];
sd = [dict componentsSeparatedByString:@"/"];
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init];
[dict1 setObject:[sd objectAtIndex:[sd count] - 1] forKey:@"name"];
NSString *OrgFilename = [sd objectAtIndex:[sd count] - 1];
NSArray *extArr = [[NSArray alloc] init];
extArr = [OrgFilename componentsSeparatedByString:@"."];
NSString *flExt = [extArr objectAtIndex:1];
[dict1 setObject:[NSString stringWithFormat:@"%d.txt",i,flExt] forKey:@"filename"];
// *** error happens VVVV
[arrMain addObject:dict1];
// *** error happens ^^^^
[ds setObject:arrMain forKey:@"files"];
[ds synchronize];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是您正在尝试从
NSUserDefaults
检索NSMutableArray
。它不会返回NSMutableArray
,而是返回NSArray
。你会想要这样做:它第一次“工作”的原因是
arrMain
为零,所以你创建了一个有效的NSMutableArray
,然后将其保存到NSUserDefaults
。之后,您得到了一个有效的对象(非零),但它不是您期望的类型。由于-[NSUserDefaults objectForKey:]
返回id
类型,因此它很乐意将其分配给您的NSMutableArray
对象,即使它不是该类型。The problem is you are trying to retrieve a
NSMutableArray
from theNSUserDefaults
. It will not be returning aNSMutableArray
, but aNSArray
instead. You will want to do:The reason it "worked" the first time through was
arrMain
was nil, so you created a validNSMutableArray
, then saved it into theNSUserDefaults
. After that, you got a valid object (non-nil), but it wasn't the type you were expecting. Since-[NSUserDefaults objectForKey:]
returns aid
type, it happily assigned it yourNSMutableArray
object, even though it wasn't that type.