2

AcaniChatを削除するすべてのメッセージをクリアする方法があります。NSFetchedResultsControllerは、ネイティブのiPhoneのメッセージアプリと同じように、すべての

for (Message *message in [fetchedResultsController_ fetchedObjects]) { 
    [managedObjectContext_ deleteObject:message]; 
} 
if (![managedObjectContext_ save:&error]) { 
    // TODO: Handle the error appropriately. 
    NSLog(@"Delete message error %@, %@", error, [error userInfo]); 
} 

しかし、削除されたメッセージの多くがあります場合にのみ、(いくつかは、オフスクリーンであることを十分に) 、AcaniChatがエラーでクラッシュする:

2011-04-10 01:06:17.629 AcaniChat[11129:207] Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. CoreData could not fulfill a fault for '0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42>' with userInfo { 
    NSAffectedObjectsErrorKey =  (
     "<Message: 0x4d665b0> (entity: Message; id: 0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42> ; data: <fault>)" 
    ); 
} 
2011-04-10 01:06:17.721 AcaniChat[11129:207] Delete message error Error Domain=NSCocoaErrorDomain Code=133000 "The operation couldn’t be completed. (Cocoa error 133000.)" UserInfo=0x4d9cf70 {NSAffectedObjectsErrorKey=(
    "<Message: 0x4d665b0> (entity: Message; id: 0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42> ; data: <fault>)" 
), NSUnderlyingException=CoreData could not fulfill a fault for '0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42>'}, { 
    NSAffectedObjectsErrorKey =  (
     "<Message: 0x4d665b0> (entity: Message; id: 0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42> ; data: <fault>)" 
    ); 
    NSUnderlyingException = "CoreData could not fulfill a fault for '0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42>'"; 
} 
2011-04-10 01:06:18.036 AcaniChat[11129:207] CoreAnimation: ignoring exception: CoreData could not fulfill a fault for '0x4d7d050 <x-coredata://F07CAEF9-5F38-4A1F-BA17-52A3E2E56978/Message/p42>' 

これを修正するにはどうすればよいですか?

+0

あなたは 'NSManagedObjectContextObjectsDidChangeNotification'オブザーバーを持っていますか? – Robert

+0

あなたのNSFetchedResultsControllerDelegateメソッドを投稿してください –

+0

私は 'fetchedResultsController_.delegate = nil'を設定してこれを解決しました。以下の答えを見てください。ありがとう! – ma11hew28

答えて

4

Iは、fetchedResultsController_.delegate = nil設定(Iタイムスタンプ細胞についてcellMapNSDateオブジェクトを追加するため、実際UITableView *chatContentのデータソースである)cellMap内のすべてのオブジェクトを削除し、その後、fetchedResultsController_.delegate = selfを設定し、フェッチ実行することによってこれを固定再度リクエストしてください。

NSError *error; 
fetchedResultsController.delegate = nil;    // turn off delegate callbacks 
for (Message *message in [fetchedResultsController fetchedObjects]) { 
    [managedObjectContext deleteObject:message]; 
} 
if (![managedObjectContext save:&error]) { 
    // TODO: Handle the error appropriately. 
    NSLog(@"Delete message error %@, %@", error, [error userInfo]); 
} 
fetchedResultsController.delegate = self;    // reconnect after mass delete 
if (![fetchedResultsController performFetch:&error]) { // resync controller 
    // TODO: Handle the error appropriately. 
    NSLog(@"fetchMessages error %@, %@", error, [error userInfo]); 
} 
[cellMap removeAllObjects]; 
[chatContent reloadData]; 
+1

コアデータの更新を行う場合は、 'beginUpdate'でテーブルビューをフリーズする必要があります。変更を完了し、' endUpdate'を呼び出すと、基礎となるデータを変更している間にテーブルビューが再描画しようとしません。 – TechZen

+0

@TechZen、私はそれを試みましたが、 '' NSInternalInconsistencyException ''を持っていました。理由: 'cellのために2つのアニメーションを作成しようとします。とにかく、私はそれがアニメーション化されることを望んでいないので、このソリューションは動作します。 – ma11hew28

0

また、MagicalRecordをチェックしてください。それは+truncateAllメソッドを持っています。

関連する問題