【发布时间】:2015-07-31 01:30:34
【问题描述】:
我尝试使用 selectedSegmentIndex 切换 cell.textLabel.text(两个不同的数组)。
第一个 selectedSegmentIndex = 1 工作正常。
但第二个会崩溃:
uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
*** First throw call stack:
(
0 CoreFoundation 0x000000010ed70c65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010e92abb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010ec5a093 -[__NSArrayM objectAtIndex:] + 227
3 ChillN 0x000000010be0363b -[EditFriends tableView:cellForRowAtIndexPath:] + 187
4 UIKit 0x000000010d2b99e8 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 508
5 UIKit 0x000000010d298208 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2853
...
这是我的代码: viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
self.currentUser = [PFUser currentUser];
PFQuery *query = [PFUser query];
[query orderByAscending:@"name"];
// [query whereKey:@"objectId" notEqualTo:self.currentUser.objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (error) {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
else {
self.allUsers = objects;
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
}
}];
self.tableData = [[NSMutableArray alloc] init];
[self getPersonOutOfAddressBook];
}
numberOfRowsInSection:
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
switch (self.segment.selectedSegmentIndex)
{
case 0:
return [self.allUsers count];
break;
case 1:
return [self.tableData count];
break;
}
return 0;
}
cellforrowatindexpath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// UIImageView *accessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
// [accessoryView setImage:[UIImage imageNamed:@"circle_arrow_right.png"]];
// [cell setAccessoryView:accessoryView];
PFUser *selected = [self.allUsers objectAtIndex:indexPath.row];
if ([self isFriend:selected]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
Person *person = [self.tableData objectAtIndex:indexPath.row];
switch (self.segment.selectedSegmentIndex)
{
case 0:
cell.textLabel.text = [[self.allUsers objectAtIndex:indexPath.row] valueForKey:@"surname"];
break;
case 1:
cell.textLabel.text = person.fullName;
break;
}
return cell;
}
索引已更改:
-(IBAction) segmentedControlIndexChanged
{
if(self.segment.selectedSegmentIndex == 0)
{
self.tableView.hidden = NO;
}
else if (self.segment.selectedSegmentIndex == 1)
{
self.tableView.hidden = NO;
}
[self.tableView reloadData];
}
我该如何解决? :)
【问题讨论】:
-
问题出在这一行:PFUser *selected = [self.allUsers objectAtIndex:indexPath.row];
-
如果您的 numberOfRowsInSection 使用 self.tableData 检查 tableView 中的单元格数怎么办。如果self.tableData = 3,但是self.allUsers只有2个对象,那么就会crash
-
@gottlieb 你是对的,当 self.tableData = 3 (或更多)并且 self.allUsers 只有 2 个对象时,它会崩溃。那我要解决什么问题?
-
@gottlieb 你是对的!当我评论 PFUser *selected = [self.allUsers objectAtIndex:indexPath.row];有用 !!!非常感谢您,但是您知道在情况 0 中如何使用它吗?
标签: ios objective-c uitableview uisegmentedcontrol nsrangeexception