代码之家  ›  专栏  ›  技术社区  ›  user6631314

iOS/Objective-C:向左滑动导致用代码创建的tableview崩溃

  •  0
  • user6631314  · 技术社区  · 6 年前

    我有一个tableview,当你向左滑动删除时,它将崩溃。删除后,当tableview在引用indexpath的cellfor行的某个点上重新加载时,它将崩溃。另一个问题是,在收到服务器上成功删除的通知之前,表不会重新加载。尽管如此,我还是搞不清是什么原因造成了车祸。是否需要另一个代表。是否必须手动更改索引xpath?提前感谢您的任何想法或建议。

    这是我的代码:

        - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
        {
            if (tableView == _myTableView ) {
            if (editingStyle == UITableViewCellEditingStyleDelete) {
               Items *itemToDelete = [_myItems objectAtIndex:indexPath.row];     
                NSNumber *iidToDelete = itemToDelete.iid;     
         //CREATE DICTIONARY AND SEND TO SERVER FOR DELETION           
                        [self postToServerDelete:data andItem:itemToDelete];
            }
            }
        }
        -(void) postToServerDelete: (NSData *) data andItem:(Items *)itemToDelete  {
              //SEND TO SERVER
                            if (successint==1) {
                                dispatch_async(dispatch_get_main_queue(), ^{              
                                    [_managedObjectContext deleteObject:itemToDelete];
                                    NSError* error;
                           [self getItems];//refreshes items list from managedobjectcontext
                                if ([_managedObjectContext save:&error]) {   
                                    [_myTableView reloadData];
                                }        
                            });
    }
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
            UITableViewCell *cell = nil;
            static NSString *StepRowIdentifier = @"RowIdentifier";
            cell = [tableView dequeueReusableCellWithIdentifier:RowIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc]
                        initWithStyle:UITableViewCellStyleDefault reuseIdentifier:RowIdentifier] ;   
            }
            //LINE WHERE CRASH OCCURS
            Items* item = [[self getItems] objectAtIndex:indexPath.row];
            NSString *steptext= item.name;
            cell.textLabel.text=name;
        return cell;
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   GeneCode    6 年前

    这条撞车线

     Items* item = [[self getItems] objectAtIndex:indexPath.row];
    

    基本上有两种原因:

    1. self getItems返回的不是array(或null)。
    2. 如果它确实返回一个数组,那么您指定的索引不再存在。

    我怀疑是2号案子,因为你提到了删除。我看到代码,你似乎删除了我的项目,但你在cellForRow中引用了[self getItems]。这两者必须是同一个对象。