これが私のコードです(リモートサーバー上のソースから複数のJSONファイルを解析する必要があります)。UITableViewに各解析のSINGLE値を入力する必要があります。
単一のJSONソース(単純)、h ** p://WWW.REMOTESERVERWITHJSONSOURCE.NET/A1:
{
"id": 0001,
"main": {
"main1A": 100,
},
"main2": {
"main2A": 200,
},
"url": "http...",
}
配列を割り当てて初期化します。
- (void)viewDidLoad {
// other stuff
arrayA = [[NSMutableArray alloc] initWithObjects:@"A1", @"A2", nil]; //each object A1, A2...An is the single JSON source I need to parse
arrayB = [[NSMutableArray alloc] initWithObjects:@"B1", @"B2", nil];
}
解析方法:
- (void)LoadParse {
main = [[NSMutableArray alloc] init];
main2 = [[NSMutableArray alloc] init];
for (int i=0; i < [arrayA count]; i++) {
NSURL *url = [NSURL URLWithString:
[NSString stringWithFormat:
@"http://WWW.REMOTESERVERWITHJSONSOURCE.NET/%@",[arrayA objectAtIndex:i]]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSMutableDictionary *arrayMain = [JSON valueForKey:@"main"];
[main addObject:[arrayMain objectForKey:@"main1A"]];
NSMutableDictionary *arrayMain2 = [JSON valueForKey:@"main2"];
[main2 addObject:[arrayMain2 objectForKey:@"main2A"]];
[table reloadData];
[table scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
}];
[operation start];
}
}
UITableViewメソッド:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [arrayA count];
}
//他のメソッド
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:
UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
cell.textLabel.font = [UIFont systemFontOfSize:12];
cell.detailTextLabel.font = [UIFont systemFontOfSize:11];
cell.textLabel.text = [NSString stringWithFormat:@"%@ - %@",[main objectAtIndex:indexPath.row],[main2 objectAtIndex:indexPath.row]]; // here I get error 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
return cell;
}
エラー:arrayAで1つのオブジェクトのみを割り当てて初期化すると、問題ありません。UITableViewに1つの行が入力され、main1とmain2の値が取得されます。この例のように、arrayAに複数のオブジェクトを割り当てて初期化すると、アプリがエラー信号SIGABRT:'NSRangeException'、理由:' * -[__ NSArrayM objectAtIndex:]:インデックス1を超えてクラッシュします[0 .. 0] ' ... なにが問題ですか?トラブルを見つけるのを手伝ってください、ありがとう!