我遇到了一些代碼問題,看看你們是否可以幫我解決問題。我相當新的目標C和一般的iPhone編程,所以任何反饋將是驚人的。從解析的JSON呈現圖像的問題
我試圖從JSON文件解析url的flickr圖像。我成功地檢索了數據並創建了需要發送到UIImageView的url的字符串。不過,我似乎有一個問題,它顯示在屏幕上的圖像。唯一顯示在屏幕上的是我的UIImageView框,它是藍色的,但沒有來自flickr的圖像。我試圖找出問題的地方,我認爲它與我的photoURLS可變數組沒有正確初始化或某事有關,因爲當我從數組中打印出一個元素時,它會打印出來,但之後打印出它的空值。
如果你們可以看看幫我弄清楚什麼是錯的,甚至建議一個更好的替代方案,我想做的事情會很棒。
下面是我ViewController.h文件的唯一的事情:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property(strong,nonatomic) NSMutableArray *photoURLS;
@end
下面是我在我ViewController.m文件中的代碼:
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
-(id)init {
self = [super init];
if(self) {
[self loadFlickrPhotos];
return self;
}
return nil;
}
-(void)loadFlickrPhotos {
NSString* urlstring = [NSString stringWithFormat:@"http://api.flickr.com/services/rest/?format=json&sort=random&method=flickr.photos.search&tags=rocket&tag_mode=all&api_key=0e2b6aaf8a6901c264acb91f151a3350&nojsoncallback=1"];
NSURL* url = [[NSURL alloc]initWithString:urlstring];
self.photoURLS = [[NSMutableArray alloc]init];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray* photos = [[parsedObject valueForKey:@"photos"]objectForKey:@"photo"];
for(NSDictionary* photo in photos) {
NSString* photoURLString = [NSString stringWithFormat:@"http://farm%@.static.flickr.com/%@/%@_%@_m.jpg", [photo objectForKey:@"farm"],[photo objectForKey:@"server"],[photo objectForKey:@"id"],[photo objectForKey:@"secret"]];
[self.photoURLS addObject:[NSURL URLWithString:photoURLString]];
}
NSLog(@"Photo #: %i", self.photoURLS.count);
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)viewDidAppear:(BOOL)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];
[super viewDidAppear:YES];
}
@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)
你確定imageData在調用dataWithContentsOfURL之後不是零嗎? – Yaniv
是的,當我試圖打印imageData而不是url時,它給了我同樣的東西「所有正確的數據,但之後說它是(空)」。所以不知道爲什麼控制檯打印兩次,因爲我只爲它創建了一個NSLog語句。 – user2942636