在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
因此,托管对象上下文中有一个实体实例。当我执行我的获取请求时,Core Data不返回此对象,它返回一个空数组。但是,如果我在上下文中存在的对象上测试相同的谓词,则谓词的计算结果为YES
。这意味着对象应该在结果中。怎么可能?
答案 0 :(得分:0)
您可以在下面尝试使用代码模拟吗?它对我来说真的很有用,也可以帮助我们限制崩溃和其他结果问题。
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();
}
希望它有所帮助。如果我们必须采用其他解决方案,请告诉我。