【发布时间】:2014-02-21 12:08:07
【问题描述】:
在 Core Data 中,我有一个 Property 实体,其属性 currentPage 类型为 Integer 16。它与具有标量属性的类ATProperty 相关联:
@interface ATProperty : NSManagedObject
@property(nonatomic, assign) int16_t currentPage;
@end
@implementation ATProperty
@dynamic currentPage;
@end
现在我有以下代码来执行请求:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Property"];
request.predicate = [NSPredicate predicateWithFormat:@"currentPage != 0"];
NSArray *results = [context executeFetchRequest:request error:nil];
大多数时候,它按预期工作。但有时,我会得到以下奇怪的结果:
(lldb)po results
<__NSArrayI 0x17e61300>(
)
(lldb)po [context executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:@"Property"] error:nil]
<_PFArray 0x17e9f3e0>(
<ATProperty: 0x17ec6400> (entity: Property; id: 0x19178e20 <x-coredata:///Property/t88822504-5974-42F5-B8D2-A62325064AFF28> ; data: {
currentPage = 9;
})
)
(lldb)p (BOOL)[request.predicate evaluateWithObject:0x17ec6400]
(BOOL) $12 = YES
因此在托管对象上下文中存在一个实体实例。当我执行我的 fetch 请求时,Core Data 不返回这个对象,它返回一个空数组。但是,如果我在上下文中存在的对象上测试相同的谓词,则谓词的计算结果为YES。这意味着该对象应该在结果中。这怎么可能?
【问题讨论】:
-
错误信息你传nil,说明你对它不感兴趣。你看过那个吗?
-
我没有,因为它返回了一个(空)数组,所以应该没有错误。如果有错误,它应该返回
nil而不是数组。 -
什么是
performFetchRequest:error:?这不是标准的核心数据方法。 -
对不起,我的意思是
executeFetchRequest:error:。我从头开始编写,而不是从实际代码中复制/粘贴,并且没有 IDE 来查明错误(而且我仍然总是开始输入 perform... 之前更正为 execute.. . 当我看到自动完成功能没有启动时)。
标签: ios core-data nspredicate nsfetchrequest