1

テーブル配列が空であるというエラーが表示され続けます。これが私のコードです:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // Set navigation bar image
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header.png"]
                                                  forBarMetrics:UIBarMetricsDefault];

    spinnerActivity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
    spinnerActivity.hidesWhenStopped = YES;
    spinnerBarButton = [[UIBarButtonItem alloc] initWithCustomView:spinnerActivity];
    self.navigationItem.rightBarButtonItem = spinnerBarButton;
    [spinnerActivity startAnimating];

    self.testString =       [[NSString alloc] init];
    self.testMutableArray = [[NSMutableArray alloc] init];
    self.myTableView =      [[UITableView alloc] init];

    [self.view addSubview:self.myTableView];

    [self getMoviesInformation];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)viewDidUnload
{
    [self setMenuBarButtonItem:nil];
    [super viewDidUnload];
}

#pragma mark - Custom Methods
- (void)getMoviesInformation
{
    NSURL *url = [NSURL URLWithString:@"http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=6844abgw34rfjukyyvzbzggz&q=The+Man+With+The+Iron+Fists&page_limit=1"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        self.testMutableArray = [JSON objectForKey:@"movies"];
        NSLog(@"Return String: %@", self.testMutableArray);
        [self.myTableView reloadData];
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
    }];

    [operation start];
}

#pragma mark - Tableview Methods
#pragma mark DataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"movieTableCell";

    MovieTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[MovieTableCell alloc] initWithStyle:UITableViewCellStyleDefault
                                     reuseIdentifier:CellIdentifier];
    }
    NSDictionary *dict = [self.testMutableArray objectAtIndex:indexPath.row];
    NSLog(@"Dict: %@", dict);
    cell.titleLabel.text = @"test";
    NSLog(@"Cell TitleLabel: %@", cell.titleLabel.text);

    return cell;
}

#pragma mark Delegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 150;
}

私が遭遇しているエラーメッセージは次のとおりです。

* キャッチされない例外 'NSRangeException' が原因でアプリを終了します。理由: '* -[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています

私の辞書が常に nil である理由と、それを機能させるためにコードを調整する必要がある理由はありますか? 私は基本的にこれをここの例にパターン化しました:

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_afnetworking/

4

1 に答える 1

1

この行を変更

self.testMutableArray = [JSON objectForKey:@"movies"];

次のようなものに:

[self.testMutableArray addObject:(id)[JSON objectForKey:@"movies"]];

オブジェクトを配列に追加するのではなく、基本的に毎回それをクリアし、有効である場合とそうでない場合があるオブジェクトをそれに割り当てます。cellForRowAtIndexPath を正しく機能させるには、配列にオブジェクトを連続して追加する必要があります。

ああ、問題はあなたの辞書がゼロであることではありません。存在しない/割り当てられていない配列の一部を取得して、それを辞書に割り当てようとしているということです。配列の数を確認しtestMutableArray.countて、実際に含まれているオブジェクトの数を確認してください。

于 2013-02-05T00:50:58.453 に答える