将字典添加到数组时,程序崩溃了吗?
当我尝试将对象添加到数组中时,我遇到了崩溃问题,我想我有创建对象并释放它的方式的问题。但我不太确定,因为我对内存管理还是比较软弱将字典添加到数组时,程序崩溃了吗?
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:学校];
您的代码看起来很清楚。唯一的白点是你在[self loadData]
方法中创建数组的方式。
你提到你从NSUserDefaults
恢复它。可能你只是通过[[NSUserDefaults standardUserDefaults] objectForKey:@"schools"]
归还它。
由于objectForKey:
方法返回id
类型的对象,你没有得到一个警告,告诉objectForKey:
回报NSArray
不NSMutableArray
。
只是做这样的事情:
return [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"schools"]];
我希望我猜你的代码的权利;)
如果你把日志这将帮助,所以我们会知道什么是崩溃实际上是。我假设你将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;
}
感谢您的快速回复,我刚刚编辑了我的问题。请再看看并帮助我。 – user1035877 2012-03-15 07:51:41
我发现你没有初始化数组loadArray。您 无法为未初始化的NSMutableArray添加任何值。
您需要从初始化开始。
NSMutableArray *loadArray = [[NSMutableArray alloc]init];
然后填充数据的阵列
[loadArray addObjectsFromArray:[self loadData]];
你能张贴崩溃日志? – Madhu 2012-03-15 05:02:55
NSMutableArray * loadedArray = [self loadData]; 确保'[self loadData]'返回的数组也是可变的...其他明智的做法是再次尝试'NSMutableArray * loadedArray = [[self loadData] mutable copy]; ' – Shubhank 2012-03-15 05:04:30
试试这个NSMutableArray * loadedArray = [[NSMutableArray alloc] initWithArray:[self loadData]]; – 2012-03-15 05:19:07