gpt4 book ai didi

ios - 核心数据谓词不匹配 bool 属性

转载 作者:行者123 更新时间:2023-11-28 18:39:40 25 4
gpt4 key购买 nike

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

如果我检查底层的 SQLite 文件,它会正确地持久化。但是,我发现使用查询此属性的谓词进行提取无法正常工作。我试过 deleted == YESdeleted == %@@YES[NSNumber numberWithBool:YES],确实 deleted == 1。我什至尝试过使用一个等号来摆脱纯粹的巫毒偏执狂。什么都没用。

这导致我使用 NSFetchedResultsController 的代码出现错误。完整谓词当前为 (list = %@) OR (deleted = YES)。我将 deleted 更改为 @YES,更改 list 的值,并且 Controller 发出意外的 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 上。

最佳答案

听起来像是与保留名称的冲突,一些深层未记录(?)使用关键字 deleted。 (在 NSManagedObjectNSFetchedResultsController 的上下文中不会很奇怪。)尝试将字段名称更改为其他名称。

关于ios - 核心数据谓词不匹配 bool 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com