0

私はこのような私のコードに持っています:

- (id)init
{
   self = [super initWithNibName:nibName bundle:nil];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(userDataDidUpdate)
                                                     name:NSManagedObjectContextDidSaveNotification
                                                   object:[UserData managedObjectContext]];
    }
    return self;
}

- (void)userDataDidUpdate
{
   // notification received...
}

そして他のクラス(CoreDataマネージャー)で私はこのようにやっています:

[[UserData managedObjectContext] performBlock:^{

                     NSError *error;
                     if (![[UserData managedObjectContext] save:&error])
                     {
                         // handle error
                     }

                     isSyncing = NO;
                     [[NSNotificationCenter defaultCenter] postNotificationName:NDUserDataSyncDidUpdateLocalData object:nil];

                     }];

問題は、マネージド objectContext の performBlock で通知を送信し、それがメイン スレッドではないことです。メインスレッドの performBlcok 内で通知を送信するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

これら 2 つのスニペットはどのように関連していますか? 登録/送信されるさまざまな通知があります。

とにかく、次のことができます。

dispatch_async(dispatch_get_main_queue(), ^{
    [[NSNotificationCenter defaultCenter] postNotificationName:NDUserDataSyncDidUpdateLocalData object:nil];        
});

PS dealloc メソッドで通知センターからオブザーバーを削除してください。

于 2013-10-17T10:03:05.870 に答える