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 に答える