核心数据获取请求正在模拟器上工作,但不在设备上

时间:2012-11-28 17:13:57

标签: ios core-data

我从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;

}

3 个答案:

答案 0 :(得分:0)

原因必须是正在查询的商店在iPad和模拟器上是不同的。确保将任何准备好的SQLite存储正确复制到设备,并验证您尝试获取的数据是否确实存在。

测试此方法的一种方法是首先在代码中插入数据。 - 然后,您可以检查您的提取请求是否正常工作。

答案 1 :(得分:0)

您不会在获取请求后检查错误(尽管您将其作为参数传递),如果您检查它,我相信您会明白问题背后的原因。此外,初始化商店时,请务必断言错误。

答案 2 :(得分:0)

我遇到了同样的问题。 我的问题是基于fetchrequest谓词。 因为谓词字符串存储在iCloud键值存储中,所以它在iCloud上没有的模拟器中工作正常。但是,在我的设备上,我忘记的谓词是在fetchrequest中实现的,没有给出任何结果。

这可能不适用于您,但请检查您的谓词。