ios - NSUserDefaults 未在 Apple Watch 上更新

标签 ios nsuserdefaults watchkit

我已经为我的 iphone 目标和 apple watch 目标添加了一个组:

enter image description here

在我的 AppDelegate 中我有这段代码:

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    let userDefaults = NSUserDefaults(suiteName: "group.tripicons")
    userDefaults!.setObject("English", forKey: "languageOfCurrentCountry")
    userDefaults!.setObject("English", forKey: "languageOfDevice")
    userDefaults!.synchronize()
    return true
  }

但是,当它在我的方法中说它是 nil 时:

class LanguageManager: NSObject {

  ...
  let userDefaults = NSUserDefaults(suiteName: "group.tripicons")

  func watchTranslation(word: String) -> String {
    print(userDefaults?.dictionaryRepresentation())

    // BREAKS HERE
    let language = userDefaults?.objectForKey("languageOfCurrentCountry") as! String // <---- BREAKS HERE
    ...
  }
}

print 语句打印一个没有我正在寻找的键的对象:

Optional(["MSVLoggingMasterSwitchEnabledKey": 0, "AppleKeyboardsExpanded": 1, "AppleLanguages": (
    en
), "AppleLanguagesDidMigrate": 2.1, "NSInterfaceStyle": macintosh, "NSLanguages": (
    en
), "AppleKeyboards": (
    "en_US@hw=US;sw=QWERTY",
    "emoji@sw=Emoji",
    "en_US@hw=US;sw=QWERTY"
)])

即使我在打开 Apple Watch 应用程序之前打开 iphone 应用程序也是如此。我错过了什么吗?

== 更新 ==

from AppDelegate:
["languageOfCurrentCountry": English, "AppleKeyboards": (
    "en_US@hw=US;sw=QWERTY",
    "emoji@sw=Emoji",
    "en_US@hw=US;sw=QWERTY"
), "AppleKeyboardsExpanded": 1, "AddingEmojiKeybordHandled": 1, "AppleLanguages": (
    "en-US"
), "ApplePasscodeKeyboards": (
    "en_US@hw=US;sw=QWERTY",
    "emoji@sw=Emoji",
    "en_US@hw=US;sw=QWERTY"
), "AppleLocale": en_US, "NSInterfaceStyle": macintosh, "MSVLoggingMasterSwitchEnabledKey": 0, "NSLanguages": (
    "en-US",
    en
), "AppleITunesStoreItemKinds": (
    audiobook,
    "tv-episode",
    booklet,
    software,
    "software-update",
    "itunes-u",
    ringtone,
    "tv-season",
    movie,
    mix,
    wemix,
    song,
    tone,
    artist,
    "podcast-episode",
    podcast,
    eBook,
    document,
    album,
    "music-video"
), "AppleLanguagesDidMigrate": 9.2, "languageOfDevice": English]

最佳答案

使用 NSUserDefaults 在 iPhone 和 Apple Watch 之间交换数据仅适用于 watchOS 1。

如果您正在为 watchOS 2 开发,您应该使用 WatchConnectivity 框架。请参阅 Apple 文档 here .

关于ios - NSUserDefaults 未在 Apple Watch 上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906219/

相关文章:

ios - 如何停止符号化将 "<redacted>" block 添加到 iOS 崩溃日志

c++ - Crashlytics Fabric 严重处理从 32 位平台上的 swift ios 调用的 throw std::exception

ios - 启动时如何从 uiviewcontroller 向 uipopover 发送数据?

iphone - 如何更新 NSUserDefault

iphone - 使用NSUserDefaults访问存储的对象

ios - Swift 错误处理——结构/类与枚举

iphone - 无法在 EKEvent 中编程开始日期

swift - 为什么 iPhone 不将数组传输到 Apple Watch?

ios - iWatch 中的分段控件

ios - 作为 willActivate 的一部分更新界面时的奇怪行为