核心数据谓词不匹配布尔属性

Tho*_*hom 0 core-data nspredicate nsfetchedresultscontroller ios

我有一个NSManagedObject带有布尔属性的子类.它是非可选的,NO默认为.在模型接口中,它@property (nonatomic, retain) NSNumber * deleted;在实现中被声明为@dynamic deleted;.

如果我检查基础SQLite文件,它会正确持久化.但是,我发现带有查询此属性的谓词的提取无法正常工作.我曾尝试deleted == YES,deleted == %@@YES[NSNumber numberWithBool:YES],的确deleted == 1.我甚至试过用纯粹的伏都教偏执狂的单一等号.什么都行不通.

这导致我的代码中使用了一个错误NSFetchedResultsController.目前是完整的谓词(list = %@) OR (deleted = YES).尽管对象仍然在逻辑上与谓词匹配,但我更改deleted@YES,更改值list,并且控制器发出意外情况NSFetchedResultsChangeDelete.

毫无疑问它与谓词匹配(至少在内存中),因为我测试过:

BOOL matchesBefore = [self.fetchedResultsController.fetchRequest.predicate evaluateWithObject:thing];
// do stuff, setting thing.deleted = @YES, thing.list = @"something else"
BOOL matchesAfter = [self.fetchedResultsController.fetchRequest.predicate evaluateWithObject:thing];
NSAssert(matchesBefore && matchesAfter, @"Should still match");
Run Code Online (Sandbox Code Playgroud)

有趣的是,在调试器中,属性显示为deleted = 0;,但是打印实际的NSNumber产量(NSNumber *) $5 = 0x07455ec0 1.同样,在底层数据库中,值正确存储为"1".

所以我很困惑.有任何想法吗?这是iOS,在模拟器和设备上都是5.x.

ilm*_*acs 5

听起来像是与保留名称冲突,一些深层无证(?)使用关键字删除.(在a NSManagedObject或者可能在的上下文中不会很奇怪NSFetchedResultsController.)尝试将字段的名称更改为其他内容.