【发布时间】:2019-01-07 04:26:29
【问题描述】:
当您向左滑动删除时,我有一个 tableview 崩溃。当 tableview 在 cellfor row atindexpath 引用 indexpath 的某个点重新加载时,它在删除后崩溃。另一个问题是,在服务器上收到成功删除的通知之前,该表不会重新加载。尽管如此,我无法弄清楚导致崩溃的原因。是否需要其他代表。我必须手动更改索引路径吗?提前感谢您的任何想法或建议。
这是我的代码:
- (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;
}
【问题讨论】:
-
崩溃说明了什么?你的堆栈跟踪?
-
这里有一些问题。您没有显示
_managedObjectContext的来源。是[self getItems]吗?在postToServerDelete中,您有andItem:(Steps*)stepToDelete... 似乎您复制/粘贴了一些代码并且没有更改“模板”以适应您正在做的事情。deleteObject是否将它从我想象[self getItems]返回的数组中删除?如果没有,您需要这样做,否则在重新加载表格时您将到达一个悬空指针。 -
崩溃是 lldb。如果您认为它会有所帮助,可以发布 bt...太长,无法放入评论
-
managedObjectContext 来自核心数据,该行成功删除了对象。 [self getItems 返回从 Core Data 获取的这些自定义对象的数组,我还添加了一行以确保它被刷新——见上文。我还尝试手动从数组中删除对象,但没有区别。)问题似乎是即使在删除之后,当表加载时,它也会尝试加载旧的项目数,而不是数字(一个less) 删除后和最后一个循环,它崩溃了。
标签: ios objective-c tableview delete-row