ブール値プロパティが削除された NSManagedObject サブクラスが与えられた場合 (これは、両方のアプローチが機能しないため、以下のコードを使用して 2 つの異なる方法で示されます):
【コード一覧1】
@interface MyManagedObject : NSManagedObject
@property (nonatomic, retain) NSNumber *deleted;
// Or @property (nonatomic) BOOL deleted;
@end
次のように作成され、Core Data に挿入されます。
【コードリスト2】
metadata.deleted = [NSNumber numberWithBool:NO];
// metadata.deleted = NO;
そして取ってきた
【コードリスト3】
// setup entity description
NSEntityDescription* entityDescription = [self entityDescription];
// setup the sorter
NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:YES];
NSSortDescriptor* sortDescriptorSection = [[NSSortDescriptor alloc] initWithKey:@"myManagedObject.category.title" ascending:YES];
// Build request
NSFetchRequest* request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
[request setSortDescriptors:[NSArray arrayWithObjects:sortDescriptorSection, sortDescriptor, nil]];
[request setPredicate:[NSPredicate predicateWithFormat:@"deleted == %@", [NSNumber numberWithBool:NO]]];
// Fetch request
NSArray* items = [[self managedObjectContext] executeFetchRequest:request error:nil];
期待どおり、items 配列内の 1 つのアイテムを返します。問題は、deleted が変更されたときです。
【コードリスト4】
MyManagedObject* myManagedObject; // Assume initialized
myManagedObject.deleted = [NSNumber numberWithBool:YES];
// myManagedObject.deleted = YES;
// Printing description of myManagedObject in debugger shows deleted = 0 at this point
[myManagedObject.managedObjectContext save:nil];
// Printing description of myManagedObject in debugger still shows deleted = 0 at this point
BOOL testValue = myManagedObject.deleted;
if (testValue) {
NSLog(@"value updated"); // This line is executed
}
コード リスト 3 を再実行すると、データベースを監視している NSFetchResultsController が更新を開始した後でも、items 配列に 1 つのアイテムが生成されます。アプリケーションを終了して再起動した場合、コード リスト 3 を再実行すると、項目 NSArray に項目が生成されません。