[英]crash on inserting an object into an array
在這個數組中的代碼中,我正在選擇一個字典,對其進行修改,然后保存回另一個數組中。但是我不知道為什么在此代碼的第二行,即我將dict插入的位置崩潰(消息發送到已釋放實例) )。我怎樣才能解決這個問題
NSArray *array=[NSArray arrayWithContentsOfFile:plistPath];
NSLog(@"array before %@",array);
NSMutableArray *tempArray=[[NSMutableArray alloc]init];
tempArray=(NSMutableArray*)array;
NSMutableDictionary *dictToBeChanged=[[NSMutableDictionary alloc]init];
dictToBeChanged=[tempArray objectAtIndex:indexPath.row];
[dictToBeChanged setObject:[NSNumber numberWithBool:YES] forKey:@"isPaid"];
[tempArray removeObjectAtIndex:indexPath.row];
[tempArray insertObject:dictToBeChanged atIndex:indexPath.row];
NSLog(@"array after %@",tempArray);
當您將array
分配給tempArray
時,不會僅僅因為tempArray
而使它可變。
這是一個NSArray
,因此您無法添加/刪除其對象。
另外,還有一些不需要的初始化(tempArray和dictToBeChanged),因為您在初始化后立即用其他東西覆蓋了這些變量(從而產生了泄漏)。
您需要的可能是這樣的:
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:plistPath];
NSMutableDictionary *dictToBeChanged = [[[array objectAtIndex:indexPath.row] mutableCopy] autorelease];
[dictToBeChanged setObject:[NSNumber numberWithBool:YES] forKey:@"isPaid"];
[array replaceObjectAtIndex:indexPath.row withObject:dictToBeChanged];
請注意,此代碼不會對plist的內容進行任何驗證。
您可能需要將對象作為temparray
添加到temparray
,如下所示:
[tempArray addObjectsFromArray:array];
嘗試這個
NSMutableArray *temp;
temp=[temp arrayByAddingObjectsFromArray:(NSArray *)otherArray];
您正在查看內存管理問題。 嘗試這個:
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:plistPath];//Temp array is unecessary
NSMutableDictionary *dictToBeChanged; //No need to allocate a new instance
沒有直接關系,但:
您的兩個alloc [init]調用都是不必要的,並且會導致泄漏。 基本上,您正在執行的操作是使用分配創建新的空白數組,並將其分配給變量。 然后,您立即將變量分配給另一個數組,從而丟失對您剛剛創建的空白數組/字典的引用,這意味着它無法釋放。 如果您稍后在代碼中調用release,則會造成麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.