从数组中解析多个嵌套对象(AFNetworking)

时间:2013-11-08 19:19:27

标签: ios json afnetworking

在我的应用中,每个“帖子”都有多个图像,每个图像有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"
                }
            }
        }
    }
]

我想解析每个图像并仅显示MEDIUM大小,这是我到目前为止所拥有的:

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

此代码仅显示每个帖子的FIRST图像(大小介质),并将其显示在UIImageView(拇指)中。

我希望以幻灯片形式显示所有图像(大小介质),并且我已经具备了该功能,除了它显示我硬编码的图像。

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

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

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

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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"];

如果您要过滤掉重复的网址,请添加distinct

... KeyPath:@"@distinctUnionOfObjects.image_file.image_file.medium.url"