1

这里是我想要的代码..的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]; 
+1

1)你得到什么错误? 2)你使用ARC? – 2011-12-16 19:41:27

+0

你好..不,我不使用弧..问题是它不打印任何错误。只是说节目收到信号SIGBART – Darshan 2011-12-16 19:45:42

回答

1

问题是你正试图找回从NSUserDefaults一个NSMutableArray。它不会返回NSMutableArray,而是返回NSArray。你会想做的事:

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

它通过“合作”第一次的原因是arrMain是零,所以您创建了一个有效的NSMutableArray,然后保存它到NSUserDefaults。之后,你得到一个有效的对象(非零),但它不是你期望的类型。由于-[NSUserDefaults objectForKey:]返回id类型,因此它很乐意将它指定给您的NSMutableArray对象,即使它不是那种类型。

相关问题