【问题标题】:NSUserDefaults not updating on Apple WatchNSUserDefaults 未在 Apple Watch 上更新
【发布时间】:2016-01-20 17:08:54
【问题描述】:

我已向我的 iphone 目标和 Apple Watch 目标添加了一个组:

在我的 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]

【问题讨论】:

  • 您是否尝试过从 Apple Watch 和 iPhone 中删除应用程序?我相信我必须这样做才能让事情顺利进行,尽管这可能是巧合。
  • 现在让我一秒钟试试
  • 不幸的是还是坏了
  • 所以确认一下。您将包含应用程序的目标添加到应用程序组以及将手表套件扩展添加到同一组。它们匹配相同,并且都是on?您是否尝试在设置后立即打印默认值(在应用程序委托中)?
  • 是的,我有 3 个应用程序组:iphone 应用程序、手表应用程序和手表扩展程序(不知道什么是诚实的)。我只是注意到一些奇怪的事情。当我只在模拟器中运行应用程序时,AppDelegate 中的打印语句会运行,但是,当我在模拟器中运行手表时,AppDelegate 中的打印语句不会打印。手表模拟器也不构建iphone应用吗?

标签: ios nsuserdefaults watchkit


【解决方案1】:

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

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

【讨论】:

  • 我还需要应用组吗?还是我只是做类似WCSession.defaultSession().updateApplicationContext(["languageOfCurrentCountry": "English"])
  • 是的,您不再需要应用组。您会在 Internet 上找到一些关于如何使用该框架的不错的教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
相关资源
最近更新 更多