为什么我在Xcode中得到NSRangeException

时间:2013-06-09 04:59:20

标签: ios xcode

我正在尝试从我的项目中加载一个plist,这一直在工作,直到我不小心删除了我的plist。 plist有5个阵列,每个有2个元素。我知道我的程序试图访问超出数组的范围,但我不知道的是这个索引设置在哪里?这是它炸弹的代码:这段代码成功执行了两次,然后由于某种原因它试图第三次访问它并在第一行炸弹,为什么?

它引发了这个异常:

NSRangeException -[_NSCFARRAY objectAtIndex] index(2) beyond bounds (2)

请帮忙,这是星期一到期的最终项目,现在我觉得我必须重新开始。

 NSString *nameOfAccount = [account objectAtIndex:indexPath.row];
 cell.textLabel.text = nameOfAccount;
 NSString *accountNumber = [number objectAtIndex:indexPath.row];
 cell.detailTextLabel.text = accountNumber;

1 个答案:

答案 0 :(得分:1)

由于您在同一单元格中显示数据,因此您可以在字典中包含帐户名称和帐号,也可以包含两个信息的自定义模型对象。

在你的plist中,这可能是结构,字典对象数组

enter image description here

显示信息时。对于dataSource,创建一个数组accounts

#define kAccountName @"Name"
#define kAccountNumber @"Number"

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Accounts" ofType:@"plist"];
    self.accounts = [NSArray arrayWithContentsOfFile:filePath];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [self.accounts count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSDictionary *account = self.accounts[indexPath.row];

    cell.textLabel.text = account[kAccountName];
    cell.detailTextLabel.text = account[kAccountNumber];

    // Configure the cell...

    return cell;
}

Source code