を使用してテーブルビューでデータを表示してNSFetchedResultsController
います。サーバーからデータが届いたら、sqliteデータベースにあるすべてのデータを削除する必要があります。
以下のコードを使用してデータベースからデータを削除すると、クラッシュすることがあります(常にではありません)。このエラーが発生します。
Execution_BAD-ACCESS(code = 2、address = 0x0)
この行に
if (![moc save:&saveError]) {
.h
@property (readonly, retain, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, retain, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, retain, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
.m
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
NSManagedObjectContext *moc = [delegate managedObjectContext];
NSFetchRequest * allCategories = [[NSFetchRequest alloc] init];
[allCategories setEntity:[NSEntityDescription entityForName:@"Categories" inManagedObjectContext:moc]];
[allCategories setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSError * error = nil;
NSArray * dataArray = [moc executeFetchRequest:allCategories error:&error];
//error handling goes here
[NSFetchedResultsController deleteCacheWithName:@"RootDetail"];
for (Categories *cat in dataArray) {
[moc deleteObject:cat];
}
NSError *saveError = nil;
if (![moc save:&saveError]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
[allCategories release];
よく調べてみると、この問題は、DetailPageControllerにアクセスして戻ったときに(UINavigationController popNavigationController :を使用して)発生していることがわかりました。その後、DetailPageControllerを要求すると、クラッシュします。
次のエラーを与える -[DetailPageController controllerWillChangeContent:]:割り当て解除されたインスタンス0x11f52a90に送信されたメッセージ*
問題はNSManageObjectContextにあります。したがって、修正は常にNSManageObjectContextの新しく作成されたオブジェクトを使用することです。そうしないと、問題が発生します。