我从AppDelegate调用以下方法。获取请求在iPad设备上返回0条记录,请指教。 记录在模拟器上正确返回。 我已经确认在设备和模拟器上传递的参数都不是零。
+ (Movie * ) movieWithID : (NSString * ) ID withObjectContext:(NSManagedObjectContext *) context
{
Movie *movie= nil;
NSFetchRequest *request =[[NSFetchRequest alloc]init];
NSLog(@"ID : %@ Context : %@", ID,context);
// Context and ID are not nil on both simulator and device
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Movie" inManagedObjectContext:context];
[request setEntity:entity];
NSError *error =nil;
NSArray * fetchResults = [context executeFetchRequest:request error:&error];
//0 records are returned on the device
//Correct number of records are returned on the simulator
if (entity && request) {
NSLog(@"Fetch Count %d",[fetchResults count]);
}
else
{
NSLog(@"Entity is nil");
}
request.predicate = [NSPredicate predicateWithFormat:@"id like %@",ID];
fetchResults = [context executeFetchRequest:request error:&error];
if ([fetchResults count] > 1) {
NSLog(@"Fetched Results > 1");
}
if (!fetchResults ) {
NSLog(@"Fetch Failed");
}
else if ([fetchResults count]== 0) {
NSLog(@"No movie results %@",error);
}
else if ([fetchResults count] ==1) {
movie= [fetchResults lastObject];
}
return movie;
}
答案 0 :(得分:0)
原因必须是正在查询的商店在iPad和模拟器上是不同的。确保将任何准备好的SQLite存储正确复制到设备,并验证您尝试获取的数据是否确实存在。
测试此方法的一种方法是首先在代码中插入数据。 - 然后,您可以检查您的提取请求是否正常工作。
答案 1 :(得分:0)
您不会在获取请求后检查错误(尽管您将其作为参数传递),如果您检查它,我相信您会明白问题背后的原因。此外,初始化商店时,请务必断言错误。
答案 2 :(得分:0)
我遇到了同样的问题。 我的问题是基于fetchrequest谓词。 因为谓词字符串存储在iCloud键值存储中,所以它在iCloud上没有的模拟器中工作正常。但是,在我的设备上,我忘记的谓词是在fetchrequest中实现的,没有给出任何结果。
这可能不适用于您,但请检查您的谓词。