【问题标题】:Watch OS 2 - How store data on Watch for fully native app?Watch OS 2 - 如何在 Watch 上存储完全原生应用的数据?
【发布时间】:2015-12-22 11:21:49
【问题描述】:

我需要在 WatchKit 扩展上存储大约 5 个变量 - 仅限手表端。该应用程序将完全是原生的,无需向 iPhone 传递任何信息。如果手表重新启动,我需要保留数据。该应用程序当前会在重新启动时重置为默认变量状态。我不确定要使用什么。我在网上找到了有关使用手表钥匙串存储键值数据对(用户名/密码)的信息,但我认为这不是我应该在这里使用的。感谢一些帮助。

【问题讨论】:

    标签: ios watchkit apple-watch


    【解决方案1】:

    watchOS 2 可以访问 CoreData、NSCoding 和 NSUserDefaults。取决于您要存储的数据,但这些是最好的(第一方)选项。

    如果您要使用 NSUserDefaults,请不要使用 standardUserDefaults,您应该使用 initWithSuiteName: 并传入您的应用组的名称。

    您甚至可以在 NSUserDefaults 上创建一个类别/扩展名来简化此操作。

    目标-C

    @interface NSUserDefaults (AppGroup)
    + (instancetype)appGroupDefaults;
    @end
    
    @implementation NSUserDefaults (AppGroup)
    
    + (instancetype)appGroupDefaults {
        static NSUserDefaults *appGroupDefaults = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            appGroupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.whatever.yourappgroupname"];
        });
        return appGroupDefaults;
    }
    
    @end
    

    斯威夫特

    private var _appGroupDefaults = NSUserDefaults(suiteName: "com.whatever.yourappgroupname")!
    
    extension NSUserDefaults {
        public func appGroupDefaults() -> NSUserDefaults {
            return _appGroupDefaults
        }
    }
    

    【讨论】:

    • 我对 NSUserDefaults 不满意。结果是无限的纺车。我实现了应用程序组——这可能是问题所在。我只是想存储简单的 int 变量……就像我说的那样,大约有 5 个,我希望应用程序完全是原生的,而不需要从 iPhone 获取任何数据。
    • 您应该使用initWithSuiteName: 并传入您的应用组的名称。我会更新我的答案。
    • 谢谢。我今晚试试这个。 :)
    • 这不再适用于 WatchOS2 - stackoverflow.com/questions/30851729/…
    • @SamB 这个答案与手表和手机之间的数据共享无关。这纯粹是在谈论从手表应用程序中将数据存储在手表上以备后用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2015-11-14
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多