Разница между Mac Mini и IMAC компиляции - PullRequest
0 голосов
/ 19 мая 2011

Я собираю и проверяю все приложения на моем iMac.Все отлично работаетКогда я пытаюсь использовать одно и то же приложение на Mac mini (серверная версия), у меня иногда возникает ошибка:

19.05.11 16:14:56 snowServer[57705] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to process pending changes before save.  The context is still dirty after 100 attempts.  Typically this recursive dirtying is caused by a bad validation method, -willSave, or notification handler.'

    *** Call stack at first throw:
    (
    0   CoreFoundation                      0x96c5a6ba __raiseError + 410
    1   libobjc.A.dylib                     0x91fb4509 objc_exception_throw + 56
    2   CoreData                            0x9719ef91 -[NSManagedObjectContext(_NSInternalChangeProcessing) _prepareForPushChanges:] + 481
    3   CoreData                            0x9719e915 -[NSManagedObjectContext save:] + 453
    4   snowServer                          0x00031da4 -[GetExternalInfo finalSave:] + 116
    5   snowServer                          0x00032c2d -[GetExternalInfo main] + 2349
    6   Foundation                          0x95df31bb -[__NSOperationInternal start] + 705
    7   Foundation                          0x95ee3d57 __doStart2 + 89
    8   libSystem.B.dylib                   0x9144e024 _dispatch_call_block_and_release + 16
    9   libSystem.B.dylib                   0x914402f2 _dispatch_worker_thread2 + 228
    10  libSystem.B.dylib                   0x9143fd81 _pthread_wqthread + 390
    11  libSystem.B.dylib                   0x9143fbc6 start_wqthread + 30
    )

Я не знаком с различиями между моделями Mac, но кто-нибудь может предложить что-то в этом случае?Некоторые советы и рекомендации по совместимости для каждой модели.

Вот как я могу сэкономить из подкласса NSOperation:

managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:[appDelegate persistentStoreCoordinator]];

[managedObjectContext setUndoManager:nil];

// Register context with the notification center
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self
       selector:@selector(mergeChanges:) 
           name:NSManagedObjectContextDidSaveNotification
         object:managedObjectContext];

- (void)mergeChanges:(NSNotification *)notification;
{
     NSManagedObjectContext *mainContext = [appDelegate managedObjectContext];

// Merge changes into the main context on the main thread
    [mainContext   performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)   
                              withObject:notification
                           waitUntilDone:YES];
}

и, наконец,

[self finalSave:managedObjectContext];

ОТВЕТ

Это очень странно, но проблема была решена:

 dispatch_async(dispatch_get_main_queue(), ^(void) { [self finalSave:managedObjectContext]; });

Странно, потому что я создал новый moc для всех операций.

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