2016-05-23 72 views
0

我是Objective-C的新手,但添加通知觀察者時遇到問題。我有一個類CoreDataStack,它是NSObject的一個子類。我正在嘗試爲iCloud同步添加通知觀察器,但我一直在收到編譯器錯誤。代碼感並不在NSNotificationCenter上。據我所知,沒有什麼額外的我需要導入。我一定會錯過一些非常明顯的東西。將通知觀察者添加到自定義類

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(persistentStoreCoordinatorStoresDidChange:) 
              name:NSPersistentStoreCoordinatorStoresDidChangeNotification 
              object:self.persistentStoreCoordinator]; 

- (void)persistentStoreCoordinatorStoresDidChange:(NSNotification*)notification { 
    NSLog(@"persistentStoreDidImportUbiquitousContentChanges"); 
} 

下面是它給我的錯誤:缺少

  • 「[」的消息的發送開始表達
  • 使用未聲明的標識符「自我」
  • 預計標識符或「(」的
+2

你需要把你的調用註冊到:'addObserver:selector:name:object:'in method * definition *,例如'-init','-viewDidLoad',等你有它在你的代碼在這裏的方式使它看起來像你試圖** **定義的方法,當你真正想做的是**調用** 一個方法。 – fullofsquirrels

+0

@fullofsquirrels哦,呃! – Morgan

回答

0

您的字符串[[NSNotificationCenter defaultCenter] addObserver...寫得正確,但您必須將其放入某種方法,而不是t就像現在一樣。

例如這種方法可以把你的AppDelegate裏面:

#import <CoreData/CoreData.h> 

@interface AppDelegate() 

@property (nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
... 
@end 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Initialize self.persistentStoreCoordinator somehow.... 
    // ... 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(persistentStoreCoordinatorStoresDidChange:) 
               name:NSPersistentStoreCoordinatorStoresDidChangeNotification 
               object:self.persistentStoreCoordinator]; 

    return YES; 
} 

- (void)persistentStoreCoordinatorStoresDidChange:(NSNotification*)notification { 
    NSLog(@"persistentStoreDidImportUbiquitousContentChanges"); 
} 

當然,任何其他類也將工作,只是使字符串[[NSNotificationCenter defaultCenter] addObserver...是一些可執行的方法的一部分。