0

URLからjsonを取得してテーブルビューに表示するサンプルアプリを構築しようとしています。データをオブジェクトに格納し、これらのオブジェクトを NSMutableArray に挿入する際に問題が発生しています。

TableView.m

- (void) getDataFromAPI {
    NSString *endpoint = @"http://www.somesite.com/list.php";

    NSURL *url = [NSURL URLWithString:endpoint];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];


    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        [self createMovies: JSON];
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response , NSError *error , id JSON){
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Uh oh, there's been a problem!" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Retry", nil];
        [alert show];
    }];
    [operation start];
}

- (void) createMovies: (id) json {

    NSMutableArray *list = [[NSMutableArray alloc] init];
    for (id entry in json) {
        Movie *aMovie = [[Movie alloc] init];
        aMovie.movieId = [entry objectForKey:@"id"];
        aMovie.title = [entry objectForKey:@"title"];
        aMovie.director = [entry objectForKey:@"director"];
        aMovie.price = [entry objectForKey:@"price"];

        aMovie = nil;
    }
    NSLog(@"%@", list);
    self.movieList = list;
}

- (void)viewDidLoad
{
    self.movieList = [[NSMutableArray alloc] init];
    [super viewDidLoad];

    [self getDataFromAPI];
    self.title = @"Movies";


    NSLog(@"%@", self.movieList);
}

を検査しようとするとself.movieListオブジェクトviewDidLoadが 0 個ありますが、 を検査するlistcreateMovies6 個のオブジェクトが得られます。

私のjsonデータの例:

[
  {
    "id": 1,
    "title": "Transformers",
    "price": 29.54,
    "Director": "Michael Bay"
  },
  {
    "id": 2,
    "title": "South Park",
    "price": 34.88,
    "author": "Matt Stone, Trey Parker"
  },
  {
    "id": 3,
    "title": "The Hobbit",
    "price": 20.04,
    "author": "Peter Jackson"
  }
]
4

1 に答える 1

5

AFJSONRequestOperationデータを非同期にロードしています。そのため、[間違った名前 -- 本来あるべきloadDataFromAPI]getDataFromAPIメソッドが返されたとき、データはまだ実際にはロードされていません。

メソッドcreateMovies:は、ムービーが表示される UI の更新をトリガーする必要があります。

于 2013-01-13T18:31:37.543 に答える