2012-03-15 79 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]]; 
相關問題