滚动时UITableView崩溃,添加或删除单元格

时间:2014-03-20 06:10:19

标签: ios objective-c uitableview ios7

我刚刚更改了我的填充方法以使用plist,并且在尝试添加或删除单元格时导致崩溃。滚动表也会导致崩溃。我没有使用IB,这是以编程方式创建的。搜索问题导致没有答案或IB相关的解决方案。我的代码是什么

//****************** Set Table Data



NSString *filePath = [[NSBundle mainBundle] pathForResource:@"stuff" ofType:@"plist"];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
devices = [NSMutableArray arrayWithArray:[dict objectForKey:@"Devices"]];


//****************** Customize Number of Rows in Table


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    int count = [devices count];
    if(self.editing) count++;
    return count;
}


//****************** Customize the Cells


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"Cell %i",indexPath.section]];

    if (cell == nil) {

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[NSString stringWithFormat:@"Cell %i",indexPath.section]] autorelease];

}

    switch(indexPath.section){
    case 0:{ cell.textLabel.text = [devices objectAtIndex: indexPath.row];} break;
    default: break;
}


    return cell;

}

这是我认为相关的代码,因为一切都很好,直到我从一个plist填充。

已请求更多代码

 //***************** Allow Editing of Cells

  - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

 [devices removeObjectAtIndex:indexPath.row];
 [myTable reloadData];

}



//****************** Add New Cell If ok button is pressed

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

UITextField * newDevice = [alertView textFieldAtIndex:0];
        NSLog(@"newDevice - %@",newDevice.text);

if (alertView.tag == 1 && buttonIndex == 1){
[devices addObject: newDevice.text];
[myTable reloadData];

更新

评论我的数据加载解决了崩溃导致我相信我错误地调用了加载数据的方式。当然,我会调查这一点,并欣赏一个更大的大脑同时投入他的两分钱。

2 个答案:

答案 0 :(得分:0)

switch更改为

 switch(indexPath.section){
   case 0:{ 
       if ([devices count] > indexPath.row) {
            cell.textLabel.text = [devices objectAtIndex: indexPath.row];
       }
   } break;
   default: break;
 }

答案 1 :(得分:0)

固定。看来我的阵列正在立即自动发布,手动保留然后释放解决了我的问题