3

AppDelegate から以下のメソッドを呼び出しています。Fetch Request は iPad デバイスで 0 レコードを返します。アドバイスしてください。シミュレーターでレコードが正しく返されます。渡された引数がデバイスとシミュレータの両方で nil でないことを確認しました。

+ (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 ストアをデバイスに正しくコピーし、取得しようとしているデータが実際にそこにあることを確認してください。

これをテストする 1 つの方法は、データを最初にコードに挿入することです。- 次に、取得リクエストが機能しているかどうかを確認できます。

于 2012-11-29T14:00:31.670 に答える
0

フェッチリクエストの後にエラーをチェックしません(パラメーターとして渡しますが)。チェックすると、問題の背後にある理由がわかるはずです。また、ストアを初期化するときは、必ずエラーもアサートしてください。

于 2012-11-29T14:59:31.143 に答える