2014-10-02 2 views
0
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSManagedObjectContext *context = [self managedObjectContext]; 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     NSLog(@"%@",context); 
     // Delete object from database 
     [context deleteObject:[self.devices objectAtIndex:indexPath.row]]; 
     NSLog(@"%@",context); 

    NSError *error = nil; 
    if (![context save:&error]) {enter code here 
     NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]); 
     return; 
    } 

    // Remove device from table view 
    [self.devices removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 


    } 
} 

ошибка является NSManagedObjectContext не может удалять объекты в других контекстахNSManagedObjectContext не может удалять объекты в других контекстах

+0

Возможный дубликат [NSManagedObjectContext не может удалять объекты в других контекстах] (http://stackoverflow.com/questions/5863724/an-nsmanagedobjectcontext -cannot-delete-objects-in-other-contexts) – Jeff

ответ

1

Экземпляр NSManagedObjectContext, что вы используете для извлечения NSManagedObject отличается от текущей.

Проверить это также: An NSManagedObjectContext cannot delete objects in other contexts

+0

как это работает правильно объяснить PLZ –

+1

у вас есть self.devices. это массив основных объектов данных. при каком-либо методе вы получаете этот массив с использованием NSManagedObjectContext ... но в приведенном выше коде используется другой экземпляр NSManagedObjectContext при удалении. Похоже, вы делаете большую ошибку с использованием собственного массива основных объектов данных с помощью методов, это небезопасно. лучше использовать NSFetchedResultsController для синхронизации. – kabarga

+0

сэр я могу отправить вам мое приложение plz решить вопрос plz sir –

0

Вы должны принесли объекты в массиве, связанный с self.devices с другим NSManagedObjectContext, чем тот, который возвращается по телефону [self managedObjectContext]. Объект, который вы пытаетесь удалить, нельзя изменить или использовать в другом контексте, поэтому вы получаете ошибку.

Что вы можете попытаться сделать, если вы хотите удалить этот объект, это вытащить его, а затем удалить/изменить объект вроде этого:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSManagedObjectContext *context; 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     NSLog(@"%@",context); 
     // Delete object from database 
     MyObject *object = [self.devices objectAtIndex:indexPath.row]; 
     context = object.managedObjectContext; 
     [context deleteObject:object] 
     NSLog(@"%@",context); 

    NSError *error = nil; 
    if (![context save:&error]) {enter code here 
     NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]); 
     return; 
    } 

    // Remove device from table view 
    [self.devices removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 


    } 
} 

Это будет работать в вашей ситуации, но то, что вам должен действительно сделать, чтобы ваш код был намного легче работать с использованием NSFetchedResultsController. Вот некоторые полезные ссылки о том, как использовать его:

http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/index.html

+0

myobject показывает ошибку "replace in nsobject" –

+0

managedObjectContext не найден –

Смежные вопросы