Основные данные iOS - удаление не отражается до перезагрузки приложения - PullRequest
1 голос
/ 22 июня 2011

Я успешно добавляю и обновляю записи в моих основных данных во втором потоке без проблем.

Однако удаление не вступает в силу, пока я не остановлю и не перезапущу приложение. Таким образом, удаление, очевидно, работает в определенной степени. Я читаю данные перед загрузкой таблицы и не делаю ничего другого, когда произошло удаление.

Я использую код

....fetch records....
BOOL deleteGem = FALSE;
if ([[attributeDict objectForKey:@"headline"] hasPrefix:@"VOID"])
    deleteGem = TRUE;

    if ([mutableFetchResults count] == 0) {
    // not there so create a new one    
        if (!deleteGem) {
            // so create a new one unless it needs deleting
            gem = (Gem *)[NSEntityDescription insertNewObjectForEntityForName:@"Gem" inManagedObjectContext:managedObjectContext];
            [gem setID:[attributeDict objectForKey:@"ID"]];
        }
    } else {

        // already exists so either get it and then update or delete it
        gem = [mutableFetchResults objectAtIndex:0];

        if (deleteGem) {
            // delete it if required
            [managedObjectContext deleteObject:gem];
            gemDeletes ++;
        }
    }
    .....

Позже у меня есть способ сохранить любые обновления, включая:

    NSError *error;
    if (![self.managedObjectContext save:&error]) { 
    ....

Любые идеи горячо приветствуются ...

Редактировать - с полным ответом на основе ответа @ TechZen ..


Зарегистрируйтесь для получения уведомлений об обновлениях во 2-м потоке в viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSaveNotification:) name:NSManagedObjectContextDidSaveNotification object:nil];

Отмена регистрации уведомлений в viewDidUnload

[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:nil];

Обработка обновления в основном потоке (новый метод в контроллере представления)

-(void)handleSaveNotification:(NSNotification *)aNotification {
    [managedObjectContext mergeChangesFromContextDidSaveNotification:aNotification];
}

1 Ответ

3 голосов
/ 22 июня 2011

Вы должны объединить фоновый контекст с контекстом переднего плана, если вы хотите, чтобы изменения, сделанные в фоновом контексте, отображались в контексте переднего плана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...