3

そのため、コアデータとiCloudを組み合わせたデータベースを使用していますが、これはうまく機能しています。

ただし、一部のユーザーは、UITableView で表現されている NSManagedObject を削除しようとした後に、特定のクラッシュが発生しました。クラッシュ レポートに添付するデバッグ ログには、クラッシュ前の次のエラー ログがあります。

2013-05-08 22:38:51.851 MyApp[11819:907] Unresolved error Error Domain=NSCocoaErrorDomain Code=134030 "The operation couldn’t be completed. (Cocoa error 134030.)", {
}

残念ながら、エラーに関する情報: {} は空であり、自分でエラーを経験したことがないため、エラーを再現する方法がわかりません。ただし、顧客には少なくとも 21 回発生しました。(さらに悪いことに、アプリを再度開くと、一部の NSManagedObject が無効な状態になり、テーブルビューの読み込みに問題があります。しかし、それは脇にあります)

実際のエラーは「tableView:commitEditingStyle:forRowAtIndexPath:」の「SIGABRT」です。それぞれのコードは次のとおりです。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        ICLog(@"Deleting the row %i,%i from the data source", indexPath.row, indexPath.section);
        NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
        [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];

        //Save the context
        NSError *error;
        if (![context save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        }
    }   
}

PS:ログから、これがすべてメインスレッドから実行されていることも明らかです。

ここにもこの問題を抱えた人はいますか?

更新

幸いなことに、私が今取り組んでいる別のアプリでも同じエラーが発生しましたが、アクセスできるデバイスでも同じエラーが発生しました (これまでのところ、どのデバイスでもこれが発生したことはありませんでした)。これは私が見つけたものです:

a) 設定で icloud をオフにした後も発生する
b) NSManagedObject を削除または挿入しようとするたびにエラーが発生する

そのため、データベースの更新が完全に停止しているようです。上記の例外をキャッチできれば、アプリは少なくともクラッシュしません。もちろん、データベースへの変更は保存されません。

4

3 に答える 3

0

[context save:] のエラーは、データモデルの無効な状態を保存しようとするとよく発生します。

以前にオブジェクトを削除したことがあるため、このオブジェクトはまだ存在している他のオブジェクトとの関係にあったと思われますが、現在はその関係が無効な状態になっています (オプションではない関係の場合は nil)。

削除ルールを確認すると役立つ場合があります。おそらく、削除するオブジェクトとの関係がオプションである必要があるか、削除を正しく伝達する必要があります。

于 2013-09-07T12:07:33.880 に答える
0

オプションの関係はオプションですか? Xcodeにとってどのような意味でオプションですか?私はこの問題を一度解決しましたが、それは「オプション」の関係によるものでした。

于 2013-09-13T17:45:39.720 に答える