Core Data Fetch 没有返回它应该返回的对象
Posted
技术标签:
【中文标题】Core Data Fetch 没有返回它应该返回的对象【英文标题】:Core Data Fetch doesn't return the object it should 【发布时间】: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.. . 当我看到自动完成功能没有启动时)。
【参考方案1】:
你能试试下面的代码模拟吗?这对我来说真的很有效,也有助于我们避免崩溃和其他结果问题。
NSManagedObjectContext *managedObjectContext;
NSEntityDescription *entityDesc = [NSEntityDescription
entityForName:@"Property"
inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSPredicate *pred =
[NSPredicate predicateWithFormat:@"currentPage != 0"];
[request setPredicate:pred];
NSManagedObject *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request
error:&error];
if ([objects count] > 0)
NSLog();
希望对您有所帮助。如果我们必须采用其他解决方案,请告诉我。
【讨论】:
这在功能上与原始代码相同。当它甚至没有不同时,这应该如何提供帮助?使用没有字符串打印的NSLog()
有什么意义?以上是关于Core Data Fetch 没有返回它应该返回的对象的主要内容,如果未能解决你的问题,请参考以下文章
Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同
iOS Core Data Fetch Request,如何使用
Core data multithreading fetch record