0

forを実行して、削除するオブジェクトを選択します。1つを削除した後、アプリがクラッシュします。インデックスが原因でfor内のオブジェクトを削除できなかったため、外部でオブジェクトを削除しましたが、それでもクラッシュすることを読みました。実行時にクラッシュすると、アレイはNSArrayであり、そうではなく、NSMutablearrayであると表示されます。なぜこれが起こっているのか誰もが知っていますか?

コードは次のとおりです。

NSMutableArray *discardedItems = [NSMutableArray array];
NSInteger catalogo = [[tmpDic objectForKey:@"catalogo"] intValue];
NSInteger documento = [[tmpDic objectForKey:@"documento"] intValue];

for (i=0; i<[self.deletedDocuments count] ; i++) 
{
    if ([[[self.deletedDocuments objectAtIndex:i] objectForKey:@"documento"] intValue] == documento &&
        [[[self.deletedDocuments objectAtIndex:i] objectForKey:@"catalogo"] intValue] == catalogo) 
        [discardedItems addObject:[self.deletedDocuments objectAtIndex:i]];
}

NSLog(@"Dictionary\n%@", self.deletedDocuments);
if (discardedItems != nil)
    [self.deletedDocuments removeObjectsInArray:discardedItems];
4

3 に答える 3

2

配列をユーザーのデフォルトに保存していますか? 変更可能なサブクラスが格納されていても、ユーザーのデフォルトから取得されたオブジェクトは不変になります

于 2012-05-30T15:58:55.860 に答える
0

試す:

for (int i=[self.deletedDocuments count]-1; i>=0 ; i--) 
{
    if ([[[self.deletedDocuments objectAtIndex:i] objectForKey:@"documento"] intValue] == documento &&
    [[[self.deletedDocuments objectAtIndex:i] objectForKey:@"catalogo"] intValue] == catalogo) {
        [self.deletedDocuments removeObjectAtIndex:i];
}
}
于 2012-05-30T16:21:00.650 に答える
0

実行時にクラッシュすると、配列は NSArray であると表示されますが、そうではなく、NSMutablearray です。

いいえ、ランタイムがその an と言う場合、NSArrayそれは anNSArrayです。NSMutableArray * deletedDocuments変数に NSArray を割り当てないようにしてください。deletedDocumentsではNSArrayないことに注意してくださいdiscardedItems

于 2012-05-30T15:52:01.640 に答える