0

[managedObjectContext deleteObject:device]の後; まだデバイスオブジェクトにデータが表示されています。データベースからデータを削除できません。データを削除するにはどうすればよいですか。

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@",  managedObjectContext);
}

NSError *error;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Reserve" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 


//    NSSortDescriptor tells defines how to sort the fetched results
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"number" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSLog(@"sort count%d",[sortDescriptors count]);


fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(number = %d)", [sender tag]];

// [fetchRequest setPredicate:predicate];
[fetchedResultsController.fetchRequest setPredicate:predicate];
self.fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];      
NSLog(@"Count of array::::%d",[fetchedObjects count]);
NSManagedObject *device = [fetchedObjects lastObject];  
NSLog(@"device::::%@",device);

[managedObjectContext deleteObject:device];

 NSLog(@"device::::%@",[fetchedObjects lastObject]);

前もって感謝します

4

1 に答える 1

2

オブジェクト()をコンテキストから削除してdeviceも、前の結果セット()の最後からオブジェクトが自動的に消えることはありませんfetchedObjects。フェッチする配列には、フェッチ時に存在していたオブジェクトがすべて含まれます。自動的には更新されません。

コンテキストからオブジェクトを削除し、デバイスが結果セットにまだ表示されているかどうかを確認した後、フェッチ要求を再度実行してみましたか?また、本当にオブジェクトを削除したままにしておきたい場合はsave、コンテキストにも適しています。

必要に応じて、デリゲートをに追加できます。デリゲートはNSFetchedResultsController、結果セットが変更されるたびにコードにコールバックします。次に、通知をキューとして使用して、アレイをリロードできます。

于 2012-05-14T12:19:59.947 に答える