相关疑难解决方法(0)

NSUserDefaultsDidChangeNotification:密钥的名称是什么,改变了什么?

当UserDefaults中的某些值发生更改时,此代码将调用方法"defaultsChanged"

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(defaultsChanged:)  
               name:NSUserDefaultsDidChangeNotification
             object:nil];
Run Code Online (Sandbox Code Playgroud)

本规范将为我提供更改的价值

- (void)defaultsChanged:(NSNotification *)notification {
    // Get the user defaults
    NSUserDefaults *defaults = (NSUserDefaults *)[notification object];

    // Do something with it
    NSLog(@"%@", [defaults objectForKey:@"nameOfThingIAmInterestedIn"]);
}
Run Code Online (Sandbox Code Playgroud)

但是如何才能获得密钥的名称,改变了?

xcode objective-c nsuserdefaults nsnotificationcenter ios

8
推荐指数
1
解决办法
1万
查看次数

NSNotificationCenter PasteboardChangedNotification不触发

我正在为iOS编写一个自定义键盘,我想检测用户何时复制一些文本。我读过您可以使用和NSNotificationCenter一起UIPasteboardChangedNotification执行此操作。

但是,当用户复制文本时,似乎没有触发我的选择器。当我addObserver在线路上放置一个断点时,尽管击中前后的断点似乎都被跳过了。这是我正在使用的代码:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

    // Register copy notifications 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleCopy:", name: UIPasteboardChangedNotification, object: nil)
}


func handleCopy(sender: NSNotification) {
//todo: handle the copied text event
}
Run Code Online (Sandbox Code Playgroud)

谁能确定我所缺少的吗?

编辑:

我注意到,如果我在注册通知后以编程方式更新粘贴板,则会触发该通知,但是如果用户使用上下文菜单“复制”,我仍然无法弄清为什么没有被点击。

keyboard ios swift

5
推荐指数
1
解决办法
1152
查看次数

KVO与Swift中的共享NSUserDefaults

我通过传达NSUserDefaults更改在主机应用程序及其扩展之间进行通信时遇到问题.

我初始化NSUserDefaults使用 init(suiteName:),使用该addObserver(...)方法添加KVO观察者并覆盖该方法 observeValueForKeyPath(...)但是observeValueForKeyPath(...)当我更改对应于观察的值时不调用该方法key.如果你帮我解决这个问题会很棒.

PS:此处套件名称是应用程序组名称,NSUserDefaults使用suiteName as group identifier将在应用程序组的私有区域内创建.

ios7 swift ios8

5
推荐指数
1
解决办法
1419
查看次数