1

サーバーからのデータをテーブルビューに入力してコアデータに保存しました。ユーザーがテーブルビューの削除オプションをクリックしたときに、コアデータからオブジェクトを削除する必要があります。私が試したことはこれです: `

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath   
{
    NSError *error; 
    [[Server serverInfo].context deleteObject:[self.couponList objectAtIndex:indexPath.row]];
    if(![ [Server serverInfo].context  save:&error]) {
        // Handle error
        NSLog(@"Unresolved error series %@, %@", error, [error userInfo]);
    }
    [self.couponList removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                     withRowAnimation:UITableViewRowAnimationFade];
    if ([self.couponList count]==0) {
        [self.table setEditing:NO animated:YES];
        [self.editBt setStyle:UIBarButtonItemStyleBordered];
    }

}

`しかし、例外が発生してクラッシュします。これは、ログに記録されています:"キャッチされなかった例外のためにアプリを終了しています'NSInvalidArgumentException'、理由:'NSManagedObjectContextは他のコンテキストのオブジェクトを削除できません "。'誰でもこれを解決できますか?ありがとうございます前進

4

3 に答える 3

1

複数の管理対象オブジェクト コンテキストを使用しているようです。これは、エラー メッセージによって示されます。管理対象オブジェクト コンテキストを 1 つだけ使用していること、つまり、別のコンテキストを使用するバックグラウンド タスクがないことを確認してください。

テーブルビューのデータを別の配列に保持しています。これは別の問題かもしれません。コア データとテーブル ビューを処理する適切な方法は、NSFetchedResultsController.

于 2012-05-18T09:01:12.920 に答える
1

オブジェクトの管理コンテキスト、フェッチ要求を作成してから、述語を使用してオブジェクトを削除する必要があります。

于 2012-05-18T07:25:36.660 に答える
0

ムンディに同意します。

それに加えて、managedObjectContext のインスタンスが多数必要な場合は、それほど多くを作成せずに、NSManagedObjectContext のロックおよびロック解除機能を使用して、障害やオブジェクトの無効化の問題なしにマルチスレッドを有効にします。

編集

おそらく、AppDelegate で NSManagedObjectContext を 1 つだけ作成して、それらを使用する必要があるコントローラーから同じ managedObjectContext を呼び出すことができます。これは、lock および unlock メソッドとともに、マルチスレッドとオブジェクトの無効化に関する問題を解決しました。

お役に立てれば。

于 2012-05-18T10:21:41.477 に答える