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.
听起来像是与保留名称冲突,一些深层无证(?)使用关键字删除.(在a NSManagedObject或者可能在的上下文中不会很奇怪NSFetchedResultsController.)尝试将字段的名称更改为其他内容.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |