2012-03-15 82 views
1

当我尝试将对象添加到数组中时,我遇到了崩溃问题,我想我有创建对象并释放它的方式的问题。但我不太确定,因为我对内存管理还是比较软弱将字典添加到数组时,程序崩溃了吗?

NSMutableDictionary *schools = [[NSMutableDictionary alloc] init]; 
    [schools setObject:name forKey:kFavoriteSchoolName]; 
    //load data is getting data from NSUserDefault which I save 
    NSMutableArray *loadedArray = [self loadData]; 

//if loadedarray has object in there, then continue adding schools to it or make new array 
if([loadedArray count] > 0) 
{ 
    [loadedArray addObject:schools]; 

    > // it crashes here 


    [schools release]; 

    return loadedArray; 
} else 
{ 

    //It will add the school to the array for the first time if there is nothing when it loaded. 

    NSMutableArray *tempArray = [[[NSMutableArray alloc] init] autorelease]; 
    [tempArray addObject:schools]; 

    [schools release]; 

    return tempArray; 
} 

这个功能帮助把学校加入收藏夹列表。我不能添加一次,但当我再次添加它时崩溃。

这是我loadData函数的代码

- (NSMutableArray *) loadData 
{ 
   NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; 
    
   NSMutableArray *list = [userDefault objectForKey:kSchoolList]; 
    
   return list; 
    
} 

日志并没有说什么,但这样的:线程1:程序接收到的信号“SGABRT”

当我第一次运行该程序,并添加,它是好的,我再加上学校,然后只有它崩溃,崩溃在[loadedArray addobject:学校];

+1

你能张贴崩溃日志? – Madhu 2012-03-15 05:02:55

+1

NSMutableArray * loadedArray = [self loadData]; 确保'[self loadData]'返回的数组也是可变的...其他明智的做法是再次尝试'NSMutableArray * loadedArray = [[self loadData] mutable copy]; ' – Shubhank 2012-03-15 05:04:30

+0

试试这个NSMutableArray * loadedArray = [[NSMutableArray alloc] initWithArray:[self loadData]]; – 2012-03-15 05:19:07

回答

1

您的代码看起来很清楚。唯一的白点是你在[self loadData]方法中创建数组的方式。

你提到你从NSUserDefaults恢复它。可能你只是通过[[NSUserDefaults standardUserDefaults] objectForKey:@"schools"]归还它。

由于objectForKey:方法返回id类型的对象,你没有得到一个警告,告诉objectForKey:回报NSArrayNSMutableArray

只是做这样的事情:

return [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"schools"]]; 


我希望我猜你的代码的权利;)

0

如果你把日志这将帮助,所以我们会知道什么是崩溃实际上是。我假设你将tempArray的值存储到加载中。试着改变你的代码,这

NSMutableDictionary *schools = [[NSMutableDictionary alloc] init]; 
    [schools setObject:name forKey:kFavoriteSchoolName]; 
    //load data is getting data from NSUserDefault which I save 
    NSMutableArray *loadedArray = [[self loadData] retain]; 

//if loadedarray has object in there, then continue adding schools to it or make new array 
if([loadedArray count] > 0) 
{ 
    if([loadedArray isKindOfClass:[NSMutableArray class]]) { 
    [loadedArray addObject:schools]; 
    } 
    else {NSLog(@"Not a mutable array");} 

    > // it crashes here 


    [schools release]; 

    return [loadedArray autorelease]; 
} else 
{ 
    [loadedArray release]; 
    //It will add the school to the array for the first time if there is nothing when it loaded. 

    NSMutableArray *tempArray = [[[NSMutableArray alloc] init] autorelease]; 
    [tempArray addObject:schools]; 

    [schools release]; 

    return tempArray; 
} 
+0

感谢您的快速回复,我刚刚编辑了我的问题。请再看看并帮助我。 – user1035877 2012-03-15 07:51:41

0

我发现你没有初始化数组loadArray。您 无法为未初始化的NSMutableArray添加任何值。

您需要从初始化开始。

NSMutableArray *loadArray = [[NSMutableArray alloc]init]; 

然后填充数据的阵列

[loadArray addObjectsFromArray:[self loadData]]; 
相关问题