0

在我的应用程序中,每个“帖子”都有多个图像,每个图像有 3 种不同的尺寸。

这就是我的 json 的样子

images: [
    {
        image_file: {
            image_file: {
                url: "../air-jordan-v-oreo-1.jpg",
                thumb: {
                    url: "../thumb_air-jordan-v-oreo-1.jpg"
                },
                medium: {
                    url: "../medium_air-jordan-v-oreo-1.jpg"
                }
            }
        }
        image_file: {
            image_file: {
                url: "../air-jordan-v-oreo-2.jpg",
                thumb: {
                    url: "../thumb_air-jordan-v-oreo-2.jpg"
                },
                medium: {
                    url: "../medium_air-jordan-v-oreo-2.jpg"
                }
            }
        }
    }
]

我想解析每个图像并只显示中等大小,这就是我目前所拥有的:

NSString *thumbURL = nil;

if ([_singleRelease[@"images"] isKindOfClass:[NSArray class]] && [_singleRelease[@"images"] count]) {
    thumbURL = _singleRelease[@"images"][0][@"image_file"][@"image_file"][@"medium"][@"url"];
    if (thumbURL)
    {
        [self.thumb setImageWithURL:[NSURL URLWithString:thumbURL]];
    }
}

此代码仅显示每个帖子的第一张图片(中等大小),并将其显示在 UIImageView(拇指)中。

我想将所有图像(中等大小)显示为幻灯片,并且我已经拥有该功能,除了它显示我硬编码的图像。

我想更改此代码并将其替换为可以显示我的图像的代码。

self.pageImages = [NSArray arrayWithObjects:
                   [UIImage imageNamed:@"photo1.jpg"],
                   [UIImage imageNamed:@"photo2.jpg"],
                   [UIImage imageNamed:@"photo3.jpg"],
                   [UIImage imageNamed:@"photo4.jpg"],
                   nil];

我怎样才能做到这一点?谢谢。

4

2 回答 2

0

试试这个,假设 _singleRelease 是一个 JSON 字符串

  NSArray *images = _singleRelease[@"images"];
  NSMutableArray *mediumImages = [NSMutableArray array];

  for (NSDictionary *imageDictionary in images){
      NSURL *imageURL = [NSURL URLWithString:imageDictionary[@"image_file"][@"medium"]];
      ///This should be done in a background thread
      NSData *imageData = [NSData dataWithContentsOfURL:imageURL];

      UIImage *image = [UIImage imageWithData:imageData];
      [mediumImages addObject:image];
   }

 self.pageImages = [mediumImages copy];
于 2013-11-08T19:29:33.080 回答
0

有一个小的转录错误,您的实际 json 是这样的:

images: [
    {
        image_file: {
            image_file: {
                url: "../air-jordan-v-oreo-1.jpg",
                thumb: {
                    url: "../thumb_air-jordan-v-oreo-1.jpg"
                },
                medium: {
                    url: "../medium_air-jordan-v-oreo-1.jpg"
                }
            }
        }
    },  // <--   
    {   // <-- 
        image_file: {
            image_file: {
                url: "../air-jordan-v-oreo-2.jpg",
                thumb: {
                    url: "../thumb_air-jordan-v-oreo-2.jpg"
                },
                medium: {
                    url: "../medium_air-jordan-v-oreo-2.jpg"
                }
            }
        }
    }
]

您可以使用 KVC 集合操作:

NSArray *urls = [_singleRelease[@"images"] valueForKeyPath:@"@unionOfObjects.image_file.image_file.medium.url"];

如果要过滤掉重复的 URL,请添加distinct

... KeyPath:@"@distinctUnionOfObjects.image_file.image_file.medium.url"
于 2013-11-08T19:55:02.433 回答