0

在我单击一个单元格以编辑一个对象后,该单元格会打开另一个 VC 以允许编辑,但如果用户单击取消,该单元格仍会被选中,并很快导致问题和崩溃。

单元格编辑:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ([segue.identifier isEqualToString:@"addAssignment"])
    {
        AddEditViewController *addEditController = segue.destinationViewController;
        [addEditController setOtherdelegate:self];
    }


   if ([segue.identifier isEqualToString:@"edit"]) {
    UITableViewCell *cell = sender;
    AddEditViewController *addEditController = segue.destinationViewController;
    [addEditController setOtherdelegate:self];
    addEditController.edit = YES;
    AssignmentInfo *a = [self.alist objectAtIndex:[self.tableView indexPathForCell:cell].row];
    addEditController.assignmentEditing = a;

    [self.alist removeObject:a];
    [self.tableView reloadData];
    NSString *filePath = [self dataFilePath];
    [NSKeyedArchiver archiveRootObject:self.alist toFile:filePath];
    }
}

按下取消按钮:

- (IBAction)addAssignmentCancelButtonPressed:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

如果需要,整个项目:http: //abdelelrafa.com/AssignmentAppTwo.zip

4

3 回答 3

1

首先你要做的是删除这一行:

[self.alist removeObject:a]; 

你的下一个:-(void)newAssignment:(AssignmentInfo *)assignment 删除:

  [self.tableView reloadData];

并添加:

 [self.tableView reloadData];

-(void)deletedAssignment:(AssignmentInfo *)assignment

最后在你的:-(void)newAssignment:(AssignmentInfo *)assignment 删除:

  NSString *filePath = [self dataFilePath];
[NSKeyedArchiver archiveRootObject:self.alist toFile:filePath];

并添加:

NSString *filePath = [self dataFilePath];
[NSKeyedArchiver archiveRootObject:self.alist toFile:filePath];

-(void)deletedAssignment:(AssignmentInfo *)assignment

于 2013-10-23T23:14:23.937 回答
0

你打电话给

[self.alist removeObject:a]; 

每次单击单元格时的方法。因此,当您在删除对象时再次选择单元格时,您将得到数组超出范围。

我不太确定您希望您的应用程序流程如何,但您可以致电:

[self.tableView reloadData];

就在您删除“a”对象以刷新表格之后。这样,表格将显示最新的数据。

否则,我建议您不要调用 removeObject,而是将对象实际传递给您的 AddEditViewController 并在那里进行修改。

于 2013-10-23T03:26:13.613 回答
0

检查 的值UITableViewController -clearsSelectionOnViewWillAppear

该设置默认为YES,因此如果它是错误的并且您没有在某处手动设置它,则您的 View 或 View Controller 生命周期可能搞砸了。

于 2013-10-23T03:26:45.930 回答