0

我正在尝试从我的项目中加载一个 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;
4

1 回答 1

1

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

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

在此处输入图像描述

当您显示信息时。为 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;
}

源代码

于 2013-06-09T06:32:22.417 回答