Ios 从解析的JSON显示图像时出现的问题

Ios 从解析的JSON显示图像时出现的问题,ios,objective-c,json,Ios,Objective C,Json,我对一些代码有问题,看看你们能不能帮我解决。 一般来说,我对objective C和iPhone编程还比较陌生,所以任何反馈都会令人惊讶 我试图从JSON文件解析flickr的图像URL。我成功地检索了数据并创建了发送到UIImageView所需的URL字符串。然而,我似乎有一个问题,它显示在屏幕上的图像。屏幕上唯一显示的是我的UIImageView框,它是蓝色的,但没有来自flickr的图像。我试图指出问题所在,我认为这与我的photoURLS可变数组没有正确初始化有关,或者是因为当我从数组中

我对一些代码有问题,看看你们能不能帮我解决。 一般来说,我对objective C和iPhone编程还比较陌生,所以任何反馈都会令人惊讶

我试图从JSON文件解析flickr的图像URL。我成功地检索了数据并创建了发送到UIImageView所需的URL字符串。然而,我似乎有一个问题,它显示在屏幕上的图像。屏幕上唯一显示的是我的UIImageView框,它是蓝色的,但没有来自flickr的图像。我试图指出问题所在,我认为这与我的photoURLS可变数组没有正确初始化有关,或者是因为当我从数组中打印出一个元素时,它确实会打印它,但在打印出它的null之后

如果你们能帮我找出问题所在,甚至提出一个更好的选择来代替我想做的事情,那就太好了

以下是我的ViewController.h文件中的唯一内容:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property(strong,nonatomic) NSMutableArray *photoURLS;

@end
在控制台中,当我尝试检查它是否工作时,它看起来如下所示:

2014-03-06 13:03:09.395 FlickrRocket[5011:11303] Photo #: 100
2014-03-06 13:03:09.705 FlickrRocket[5011:11303] Photo from url is: http://farm4.static.flickr.com/3678/12943650293_faf143aca1_m.jpg
2014-03-06 13:03:09.707 FlickrRocket[5011:11303] Photo from url is: (null)

不要在init中加载照片。 试试这个:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self loadFlickrPhotos];
}

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    NSData *imageData = [NSData dataWithContentsOfURL:[self.photoURLS objectAtIndex:0]];
    NSLog(@"Photo from url is: %@",[self.photoURLS objectAtIndex:35]);
    UIImageView* imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 250, 250)];

    imageView.backgroundColor = [UIColor blueColor];

    imageView.image = [UIImage imageWithData:imageData];

    [self.view addSubview:imageView];
}

- (void)loadFlickrPhotos
{
    ...
}

在调用dataWithContentsOfURL后,您是否确保imageData不是nil?是的,当我尝试打印imageData而不是url时,它给了我相同的信息“所有正确的数据,但之后说它是(null)”。所以我不知道为什么控制台会打印两次,因为我只为它创建了一个NSLog语句。噢,哇,非常感谢,这很有帮助:)你能解释一下问题出在哪里吗?我还不习惯初始化是如何工作的,以及先调用什么。Init在分配后立即被调用。在ViewControllers中,您通常会初始化成员变量,甚至不会重载它。viewDidLoad是启动装载操作的好地方。每次视图出现时,都会调用ViewDidAspect。在这种情况下,直接在viewDidLoad中加载图像也是可行的,因为如果视图再次出现,则无需重新加载图像。(但这在很大程度上取决于用例)。
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self loadFlickrPhotos];
}

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    NSData *imageData = [NSData dataWithContentsOfURL:[self.photoURLS objectAtIndex:0]];
    NSLog(@"Photo from url is: %@",[self.photoURLS objectAtIndex:35]);
    UIImageView* imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 250, 250)];

    imageView.backgroundColor = [UIColor blueColor];

    imageView.image = [UIImage imageWithData:imageData];

    [self.view addSubview:imageView];
}

- (void)loadFlickrPhotos
{
    ...
}