簡體   English   中英

在將對象插入數組時崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM