0

我有一个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");

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

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

4

1 回答 1

5

听起来像是与保留名称的冲突,一些深层的无证(?)使用关键字deletedNSManagedObject(在 a或.的上下文中不会感到奇怪NSFetchedResultsController。)尝试将字段名称更改为其他名称。

于 2012-10-09T16:18:01.293 回答