我有两个部分,AM 和 NZ。
我注意到,如果我在每个部分中有相同数量的城市,就不会有问题。但是,如果我没有相同数量的城市,程序将会崩溃。
错误是
-[__NSArrayM objectAtIndex:]:索引 2 超出范围 [0 .. 0]'
这是我生成错误时的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Region";
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
AM = [[NSMutableArray alloc] init];
NZ = [[NSMutableArray alloc] init];
[AM addObject: @"Bologna"];
[AM addObject: @"Florence"];
[AM addObject: @"Milan"];
[NZ addObject: @"Naples"];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
switch (section) {
case 0:
return [AM count];
break;
case 1:
return [NZ count];
break;
default:
return section;
break;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
NSInteger section = [indexPath section];
switch (section) {
case 0:
[cell.textLabel setText: [AM objectAtIndex: [indexPath row]]];
break;
case 1:
[cell.textLabel setText: [NZ objectAtIndex: [indexPath row]]];
break;
default:
break;
}
return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
switch (section) {
case 0:
return @"A-M";
break;
case 1:
return @"N-Z";
break;
default:
break;
}
return nil;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString * AMPath = self.luzonRegion [indexPath.row];
NSString * NZPath = self.visayasRegion [indexPath.row];
switch (indexPath.section) {
case 0:
cityController.title = luzonRegionPath;
NSLog(@"Selected city: %@", AMPath);
break;
case 1:
cityController.title = visayasRegionPath;
NSLog(@"Selected city: %@", NZPath);
break;
default:
break;
}
[[self navigationController] pushViewController:cityController animated:YES];
}