Удалить запрос и синхронизировать RESTkit с основными данными и потоковой передачей

Чтобы было ясно... Мои цели: -

1. Отправьте запрос на удаление на сервер (готово), я получаю ответ, но не уверен, синхронизирован ли он с основной базой данных или нет. поэтому мне нужно знать, как удалить конкретный объект из базы данных с помощью Restkit.

2. Путаница с ManagedObjectContext. Я слишком запутался с контекстом и потоками. Я использую везде для всей моей операции этот контекст. :- [RKObjectManager sharedManager].managedObjectStore.mainQueueManagedObjectContext] Но я хочу, чтобы обработка выполнялась в потоке Bg, а результат обновлялся в основном потоке. Теперь есть некоторая концепция дочернего контекста. Как им пользоваться, для меня до сих пор загадка.

3. Если я хочу использовать многопоточность, для выполнения запроса к серверу с использованием Restkit и сопоставления. Как использовать контекст управляемого объекта. (я имею в виду правильный способ его использования)


person Sumitiscreative    schedule 12.03.2013    source источник


Ответы (1)


Вы можете использовать приведенный ниже код для управления NSManagedObjectContext в многопоточном

- (void)mergeChanges:(NSNotification*)notification
{
    NSLog(@"[mergeChanges] enter");
    // save changes to manageObjectContext on main thread
    AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
    [[theDelegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
                                                         withObject:notification
                                                      waitUntilDone:YES];
    NSLog(@"[mergeChanges] leave");
}

- (NSManagedObjectContext*)startThreadContext
{
    AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
    [newMoc setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];

    // Register for context save changes notification
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(mergeChanges:)
                                                 name:NSManagedObjectContextDidSaveNotification
                                               object:newMoc];

    return newMoc;
}

- (void)stopThreadContext:(NSManagedObjectContext*)context
{
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:NSManagedObjectContextDidSaveNotification
                                                  object:context];
}

В начале контекста потока вы можете вызвать

-(NSManagedObjectContext*)startThreadContext

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

person andykkt    schedule 12.03.2013
comment
Эй, да... кажется, все в порядке, если человек использует непосредственно основные данные. Но в моем случае это косвенное использование Core Data через Restkit. Итак, как убедиться, что это правильный способ использования Restkit. - person Sumitiscreative; 12.03.2013