0

アルバムの最初の画像のURLを取得しようとしています。jsonWebサービスからデータを取得しています。このWebサービスは次のようになります。

  "albums": [

        {
            "name": "Club Brugge - KRC Genk",
            "date": "08.10.2012",
            "pic_album_id"  : 1
            "pictures": [
                {
                    "url": "http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg",
"picture_id" : 1
                },
                {
                    "url": "http://www.krcgenk.be/images/gallery/album_199/800X600/e8e10c0664eb0533a0534ed69891b165.jpg"
"picture_id" : 2
                },
                {
                    "url": "http://www.krcgenk.be/images/gallery/album_199/800X600/750b55a87b8eae33b8f3278add9bec44.jpg"
"picture_id" : 3
                },
                {
                    "url": "http://www.krcgenk.be/images/gallery/album_199/800X600/5867e1dedd00d08d830fd7f098a0b747.jpg"
"picture_id" : 4
                }

最初のURLのみを取得しようとしています。次の関数でこれを取得しようとしています。

- (NSString *)getFirstPictureOfAlbumId: (int)AlbumId
{

    NSString *picture_Url = [[NSString alloc]init];
      NSLog(@"here1");
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
      NSLog(@"here2");
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(picture_id == 1) AND (pic_album_id == %@)",AlbumId];
      NSLog(@"here3");
    [request setEntity:[NSEntityDescription entityForName:@"Picture" inManagedObjectContext:self.genkDatabase.managedObjectContext]];
      NSLog(@"here4");
    [request setPredicate:predicate];
      NSLog(@"here5");
    NSError *error = nil;
    NSArray *results = [self.genkDatabase.managedObjectContext executeFetchRequest:request error:&error];
    if (error != nil)
    {
        //handle errors
    }
    NSLog(@"picture url is: %@",[results valueForKey:@"url"]);
    picture_Url = [results valueForKey@"url"];
    return picture_Url;
}

私のログは「here2」にしか到達しないので、述語に何か問題があると思います。私が抱えているもう1つの問題は、最初の画像のURLを保存することです。

誰か助けてもらえますか?

前もって感謝します

編集

これは私のテーブルビューで行うことです

 NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[self getFirstPictureOfAlbumId:indexPath.row+1]]];
    NSLog(@"indexpatch is: %d",indexPath.row+1);
    NSLog(@"first picture is: %@",[self getFirstPictureOfAlbumId:indexPath.row+1]);

そして、このようにログに記録します。

012-10-09 13:17:58.140 RacingGenk[6069:c07] album id is: 1
2012-10-09 13:17:58.311 RacingGenk[6069:c07] indexpatch is: 1
2012-10-09 13:17:58.311 RacingGenk[6069:c07] album id is: 1
2012-10-09 13:17:58.313 RacingGenk[6069:c07] first picture is: http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg
2012-10-09 13:17:58.314 RacingGenk[6069:c07] album id is: 2
2012-10-09 13:17:58.445 RacingGenk[6069:c07] indexpatch is: 2
2012-10-09 13:17:58.445 RacingGenk[6069:c07] album id is: 2
2012-10-09 13:17:58.446 RacingGenk[6069:c07] first picture is: http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg
2012-10-09 13:17:58.447 RacingGenk[6069:c07] album id is: 3
2012-10-09 13:17:58.577 RacingGenk[6069:c07] indexpatch is: 3
2012-10-09 13:17:58.577 RacingGenk[6069:c07] album id is: 3
2012-10-09 13:17:58.578 RacingGenk[6069:c07] first picture is: http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg

EDIT2

ログ

RacingGenk[6605:c07] picture_id=1, album_id=1, url=http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg
2012-10-09 13:57:40.361 RacingGenk[6605:c07] picture_id=1, album_id=2, url=http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg
2012-10-09 13:57:40.525 RacingGenk[6605:c07] picture_id=1, album_id=3, url=http://www.krcgenk.be/images/gallery/album_199/800X600/1a06dc0e405fd0219e3d327f1eec7fbf.jpg
4

2 に答える 2

1

あなたの述語で

[NSPredicate predicateWithFormat:@"(picture_id == 1) AND (pic_album_id == %@)", AlbumId];

フォーマット指定子(オブジェクト用)として「%@」を使用しますが、int引数を使用しますAlbumId

「pic_album_id」属性がNSNumberコアデータモデルのように保存されている場合、述語は次のようになります。

[NSPredicate predicateWithFormat:@"(picture_id == 1) AND (pic_album_id == %@)",
   [NSNumber numberWithInt:AlbumId]];

注: Objective Cでは、変数名を小文字で始めるのが非常に一般的です。つまり、ではありませんalbumIdAlbumIdこの規則を使用すると、このフォーラムの他のユーザーがコードを読みやすくなります。)

編集:指定されたアルバムにある最初の画像を取得するにはalbumId、次の述語が機能する必要があります。

[NSPredicate predicateWithFormat:@"(picture_id == 1) AND (album.pic_album_id == %@)",
   [NSNumber numberWithInt:albumId]];

このコードは、PictureエンティティからAlbumエンティティへのの関係(picturesの逆の関係)があることを前提としています。

結果が1つしかない場合でも、配列に格納されます。

NSArray *results = [self.genkDatabase.managedObjectContext executeFetchRequest:request error:&error];
if (results == nil) {
    // handle errors
} else if (results.count == 0) {
    // nothing found
} else {
    Picture *picture = [results objectAtIndex:0];
    NSLog(@"picture_id=%@, album_id=%@, url=%@", picture.picture_id, picture.album.pic_album_id, picture.url);
    pictureUrl = [picture url];
} 
于 2012-10-09T09:20:26.167 に答える
0

私は以前にNSPredicateを使用していますが、これを使用できるかもしれません

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id == 1"];

Webサービスから返されるものとして、NSPredicateの正確な変数名を使用します。

于 2012-10-09T08:27:28.677 に答える