2017-02-15 12 views
0

これは単純な作業だと思いますが、これまでのところ、CoreDataではなく行自体を削除できます。私が書いてみようとしているコード - フェッチとNSManagedオブジェクトは動作しません。私はちょっと混乱しています。誰かが私を助けることができますか?私が持っているもの:IOS/Objective-C:編集スタイルメソッドで行とコアデータを削除する - UITable

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

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Spot"]; 

    NSManagedObject *managedObject = [request objectAtIndexPath:indexPath]; 
    [self.managedObjectContext deleteObject:managedObject]; 
    [self.managedObjectContext save:nil]; 

    //delets the row but not the core data 
    [_locations removeObjectAtIndex:[indexPath row]]; 


    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

} 
} 
+0

*エラーNSErrorを渡すことでerror.localizedDescription'チェック '、'&ERROR' '[self.managedObjectContext保存:&エラー]で'; – iAviator

答えて

0

は、このようにそれを行うと、この順序で:

  • は、インデックス(パス)でデータソース配列からオブジェクトを取得します。
  • コンテキスト内のオブジェクトを削除します。
  • コンテキストを保存し、エラーを確認します。
  • 成功すると、データソース配列からオブジェクトを削除し、テーブルビューの行を削除します。

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

     NSManagedObject *objectToDelete = [_locations objectAtIndex:indexPath.row]; 
     [self.managedObjectContext deleteObject: objectToDelete]; 
     NSError *error; 
     [self.managedObjectContext save:&error]; 
     if (error) { 
      NSLog(@"Could not save managed object context due to error: %@", error); 
     } else { 
      [_locations removeObject:objectToDelete]; 
      [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
    } 
} 
+0

ポスト・ヴァイディアンに感謝しますが、データはまだそこにあります。私は新しい場所を挿入し、行を削除し、アプリケーションを停止し、再起動し、スポットはまだそこにある... fecthは必要ありませんか? – FuManchu

+1

いいえ、データソース配列がフェッチによって一度生成された場合、フェッチは必要ありません。 'managedObjectContext'は' nil'ではありませんか? 'NSFetchedResultController'を使うことを考えてください。それはいくつかのことをより便利にします。 – vadian

+0

と私はこのように置く:if(!error){ NSLog(@ "%@"、error); } nullが返される – FuManchu

関連する問題