NSMutableArray addObject:给出错误

时间:2011-12-16 19:38:43

标签: objective-c nsmutablearray nsuserdefaults nsmutabledictionary

以下是我正在尝试的代码..

但问题是当我第一次加载视图时它工作..没有任何问题..

但是当我尝试再次加载视图并调用此代码时...它会在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];

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试从NSMutableArray检索NSUserDefaults。它不会返回NSMutableArray,而是返回NSArray。你会想要:

NSMutableArray *arrMain = [[[ds objectForKey:@"files"] mutableCopy] autorelease];

第一次“工作”的原因是arrMain为零,因此您创建了有效的NSMutableArray,然后将其保存到NSUserDefaults。之后,你得到了一个有效的对象(非零),但它不是你期望的类型。由于-[NSUserDefaults objectForKey:]会返回id类型,因此很高兴为其分配了NSMutableArray对象,即使它不是那种类型。