2013-11-14 74 views
0

我正在使用AFNetworking從JSON文件解析圖像,鏈接和時間到我的iPhone應用程序。AFNetworking解析JSON url圖像錯誤

的JSON結構看起來是這樣的:

[ 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"19 minutes 'ago' " 
    }, 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"45 minutes 'ago' " 
    }, 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"2 hours 'ago' " 
    }, 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"2 hours 'ago' " 
    } 

] 

而且我對應用程序的代碼如下所示:

#import "ViewController.h" 

#import "AFNetworking.h" 

@implementation ViewController 

@synthesize tableView = _tableView, activityIndicatorView = _activityIndicatorView, movies = _movies; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Setting Up Table View 
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.view.bounds.size.height) style:UITableViewStylePlain]; 
    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    self.tableView.hidden = YES; 
    [self.view addSubview:self.tableView]; 

    // Setting Up Activity Indicator View 
    self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    self.activityIndicatorView.hidesWhenStopped = YES; 
    self.activityIndicatorView.center = self.view.center; 
    [self.view addSubview:self.activityIndicatorView]; 
    [self.activityIndicatorView startAnimating]; 

    // Initializing Data Source 
    self.movies = [[NSArray alloc] init]; 

    NSURL *url = [[NSURL alloc] initWithString:@"http://link-to-json-file.com/pictureparse.php?name=Name"]; 
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     self.movies = [JSON objectForKey:@"results"]; 
     [self.activityIndicatorView stopAnimating]; 
     [self.tableView setHidden:NO]; 
     [self.tableView reloadData]; 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
     NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); 
    }]; 

    [operation start]; 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

// Table View Data Source Methods 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (self.movies && self.movies.count) { 
     return self.movies.count; 
    } else { 
     return 0; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellID = @"Cell Identifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID]; 
    } 

    NSDictionary *movie = [self.movies objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [movie objectForKey:@"title"]; 
    cell.detailTextLabel.text = [movie objectForKey:@"published"]; 

    NSLog(@"Blabla: %@"), movie; 

    NSURL *url = [[NSURL alloc] initWithString:[movie objectForKey:@"link"]]; 
    [cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"]]; 

    return cell; 
} 

@end 

但是,當我啓動應用程序,我得到這個錯誤:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x8d40ac0' 

我在做什麼錯了?

回答

1

你的json對象似乎是一個有字典的數組。 NSArray沒有objectForKey:方法。您必須從數組中獲得您感興趣的字典對象,然後使用鍵獲取值。

編輯。

如果您的財產self.movies有適當的類型,並且您想簡單地將json數組分配給它,請嘗試self.movies = JSON;(JSON對象已經是一個字典數組)。

+0

好的,我該怎麼做? – tracifycray

+0

應該self.movi​​es = JSON;在cellForRowAtIndexPath? – tracifycray

+0

不確定我是否正確,但不是。 'self.movi​​es'將是一個數據字典數組,您可以使用它來填充表格視圖單元格的字段。 –