0

我正在尝试获取相册第一张图片的网址。我正在从 json 网络服务获取我的数据。这个网络服务看起来像这样。

  "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”所以我认为我的谓词有问题。我遇到的另一个问题是存储第一张图片的网址。

有谁能够帮我?

提前致谢

编辑

这就是我在我的表格视图中所做的

 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

编辑2

日志

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 中,让变量名以小写字母开头是很常见的,即albumId代替 AlbumId. 使用该约定可以使您的代码更容易被论坛中的其他人阅读。)

编辑:要获得相册中的第一张图片 given albumId,以下谓词应该有效:

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

此代码假定您具有从Picture实体到Album实体的反向关系专辑(与图片的反向关系)。

即使只有一个结果,它也存储在一个数组中:

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"];

使用 NSPredicate 的 EXACT 变量名称作为从您的 Web 服务返回的内容。

于 2012-10-09T08:27:28.677 回答