2011-12-14 1 views
1

Я хочу использовать ASINetworkQueue внутри NSOperation. Это отлично работает и не вызывает проблем. Что не удается, это сохранение основных данных. Я установил новый NSManagedObjectContext для этой операции, как это сказано в документах.ASINetworkQueue внутри NSOperation ошибка сохранения данных ядра

Я думаю, что проблема в том, что я сохраняю данные при завершении ASINetworkQueue и делегировании делегатов. Поскольку делегаты вызываются в mainThread, сообщение об ошибке выходит из строя.

Возможно, это проблема, и у кого-нибудь есть решение?

ответ

0

Вы используете метод метода PerformSelectorOnMainThread (чтобы объединить изменения из нового экземпляра ManagedObjectContext)?

я сделать что-то подобное в моих операций (CTX мой экземпляр MOC):

Первый регистр для уведомлений:

// Register context with the notification center 
     NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

     [nc addObserver:self 
       selector:@selector(mergeChanges:) 
        name:NSManagedObjectContextDidSaveNotification 
       object:ctx]; 

Затем, когда вам нужно сохранить контекст:

if ([ctx hasChanges]) { 
      error = nil; 

      // Save the context. 
      if (![ctx save:&error]) 
      { 
       // Do something with the error 
      } 

      // Clear out the scratchpad 
      [ctx reset]; 

     } 

И затем метод, который объединяет с основным MOC:

- (void)mergeChanges:(NSNotification *)notification 
{ 
    id appDelegate = [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *mainContext = [appDelegate managedObjectContext]; 
    // Merge changes into the main context on the main thread 
    [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
            withObject:notification 
           waitUntilDone:NO]; 
    // NSLog(@"Merged Changes"); 
} 

Надеется, что это помогает

+0

Да, я использую это, но я думаю, что он выходит из строя, потому что делегаты призвали mainThread так, если я сохраню свой отдельный созданный контекст, я получаю сообщение об ошибке, потому что это не сохраняется на отдельном потоке. Это мое предложение, но, возможно, это не проблема. – MoFuRo

+0

Вы не можете создать экземпляр ASINetworkQueue внутри NSOperation и обработать метод делегирования там также? Я делаю то же самое (хотя просто использую ASIHttpRequest) и обрабатываю метод делегата внутри NSOperation, и он отлично работает. –