2012-05-18 5 views
1

Я заполнил табличный вид с некоторыми данными с сервера и сохранил его в основных данных. Теперь мне нужно удалить объект из основных данных, когда пользователь нажимает на delete в представлении таблицы. Что я попытался это: `приложение сбой при удалении объекта из основных данных в iphone

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSError *error; 
    [[Server serverInfo].context deleteObject:[self.couponList objectAtIndex:indexPath.row]]; 
    if(![ [Server serverInfo].context save:&error]) { 
     // Handle error 
     NSLog(@"Unresolved error series %@, %@", error, [error userInfo]); 
    } 
    [self.couponList removeObjectAtIndex:indexPath.row]; 
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
        withRowAnimation:UITableViewRowAnimationFade]; 
    if ([self.couponList count]==0) { 
     [self.table setEditing:NO animated:YES]; 
     [self.editBt setStyle:UIBarButtonItemStyleBordered]; 
    } 

} 

` Но это дает исключение и crashes.This это я получаю в журнале: "Нагрузочное приложение из-за неперехваченное исключение„NSInvalidArgumentException“, причина:« NSManagedObjectContext не может удалять объекты в других контекстах ».« Может ли кто-нибудь решить эту проблему? »Заранее спасибо!

+0

В какой строке вы попадаете? – Narayana

+0

@Narayana на этой строке [[Server serverInfo] .context deleteObject: [self.couponList objectAtIndex: indexPath.row]]; –

+0

@alpz Опять же, вы не можете получить доступ к своей учетной записи? –

ответ

1

Вы должны сделать некоторый контекст manageobject, запрос на выборку, а затем удалить объект с помощью какого-либо предиката.

+0

shud i add smthng вот так? NSManagedObjectContext * context = [Server serverInfo] .context; NSFetchRequest * singleCoupon = [[NSFetchRequest alloc] init]; –

+0

может у меня код –

+0

да, но вам придется дождаться этого до одного часа :) – Saad

1

Видимо, вы используете несколько контекстов управляемого объекта. Это указывает ваше сообщение об ошибке. Убедитесь, что вы используете только один контекст управляемых объектов, т. Е. Нет фоновых задач, которые используют другой.

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

0

Согласен с Мунди.

Кроме того, если вам требуется много экземпляров управляемых объектов, не создавайте их, а используйте функции блокировки и разблокировки NSManagedObjectContext, чтобы включить многопоточность без проблем при сбоях и недействительности объектов.

EDIT

Может быть, вы можете попробовать создать только один NSManagedObjectContext в AppDelegate и вызвать тот же managedObjectContext от контроллеров, где вы должны использовать их. Это и вместе с методами блокировки и разблокировки решило мою проблему с многопоточными и недействительными объектами.

Надеюсь, что это поможет.

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