3

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

}
4

3 回答 3

0

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

一种测试方法是首先在代码中插入数据。- 然后您可以检查您的获取请求是否有效。

于 2012-11-29T14:00:31.670 回答
0

您不会在获取请求后检查错误(尽管您将其作为参数传递),如果您检查它,我相信您会找到问题背后的原因。此外,当您初始化存储时,请确保也声明错误。

于 2012-11-29T14:59:31.143 回答
0

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

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

于 2016-06-24T14:05:19.067 回答