将通知观察者添加到自定义类

时间:2016-05-23 18:15:57

标签: objective-c ios9

我是Objective-C的新手,我在添加通知观察器时遇到了麻烦。我有一个类CoreDataStack,它是NSObject的子类。我正在尝试为iCloud同步添加通知观察器,但我不断收到编译器错误。代码意义不在NSNotificationCenter上。据我所知,没有任何额外的东西需要导入。我必须遗漏一些非常明显的东西。

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

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

以下是它给我的错误:

  • 失踪' ['在消息发送表达开始
  • 使用未声明的标识符' self'
  • 预期标识符或'('

1 个答案:

答案 0 :(得分:0)

您的字符串[[NSNotificationCenter defaultCenter] addObserver...写得正确,但您必须将其放在某个方法中,而不是现在的顶层。

例如,此方法可以放在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...作为某些可执行方法的一部分。