0

json を uitableview に読み込もうとしています。以前にjsonを使用したことがありますが、テーブルビューで使用したことはありません。このエラーが発生し続けます: -[__NSCFNumber count]: 認識されないセレクターがインスタンスに送信されました。numberOfRowsInSection メソッドで配列のカウントを返すためだと確信しています。これを修正する方法、または何かが欠けていて表示されない場合はお知らせください。

これが彼のコードです:.hファイル

    @interface HistoryViewController : UITableViewController <UITableViewDataSource,                  UITableViewDelegate>
{
    NSArray *jsonData;
    NSMutableData *responseData;
}

.m ファイル

- (void)viewDidLoad 
{       
responseData = [[NSMutableData data] retain];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"Json url"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self ];


[super viewDidLoad];
}


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Connection failed: %@", [error description]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];

NSDictionary *dictionary = [responseString JSONValue];
NSArray *response = [dictionary objectForKey:@"name"];

jsonData = [[NSArray alloc] initWithArray:response];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
return  jsonData.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [[UITableViewCell alloc]
                         initWithStyle:UITableViewCellStyleDefault
                         reuseIdentifier:@"cell"];


cell.textLabel.text = [jsonData objectAtIndex:indexPath.row];

return cell;
}
4

1 に答える 1

1

connectionDidFinishLoadingメソッドが実行されるまで配列が初期化されないことに気付きました。データ テーブルのデリゲート メソッドは の前に実行される可能性が高いため、配列をではなく でconnectionDidFinishLoading初期化する必要があります。jsonDataviewDidLoadconnectionDidFinishLoading

connectionDidFinishLoading呼び出しは同じままでかまいませんがreloadData、メソッドの最後にデータ テーブルを呼び出してconnectionDidFinishLoading、ダウンロードしたデータをデータ テーブルに入力してください。

于 2012-06-20T15:47:13.527 に答える