Apple Watch、WatchKit 和 NSUserDefaults [重复]

Posted

技术标签:

【中文标题】Apple Watch、WatchKit 和 NSUserDefaults [重复]【英文标题】:Apple Watch, WatchKit, and NSUserDefaults [duplicate] 【发布时间】:2014-11-23 05:20:05 【问题描述】:

我想既然“Watch App”是同一个 ios 应用程序中的一个捆绑包,我应该能够在我的 Apple Watch 应用程序中访问 NSUserDefaults。不是这样吗?

我似乎无法从我的 iOS 获取 NSUserDefaults 值(我确保它有数据,因为它在 iOS 应用程序中加载良好)。

当我在 Apple Watch 应用程序中运行它时,它显示为空。我无法访问与 iOS 父应用相同的 NSUserDefaults 值吗?

我有一个包含 NSMutalArray 的自定义类。这个可变数组是我想在 Watch App 的表格中显示的内容。这个包含 NSMutableArray 的类也具有将数据保存/加载到/从 NSUserDefaults 的功能。它在我的 iOS 应用中运行良好,但无法在 Apple Watch 应用中加载数据。

我在这里做错了什么或者我没有意识到什么?

这是课程:

请记住,我也将它用作单例对象。它通过首先将自身转换为 NSData 来将其数据保存到 NSUserDefaults 中——这就是为什么您会在此类中看到可以忽略的额外函数的原因。

#import "Teacher.h"
#import "Course.h"

@implementation Teacher

static Teacher *sharedInstance = Nil;

+ (Teacher *)sharedInstance

    @synchronized(self)
    
        if(!sharedInstance)
        
            sharedInstance = [[self alloc] init];
        
    

    return sharedInstance;


- (id)init

    self = [super init];

    if (self)
    
        _classes = [[NSMutableArray alloc] init];
    

    return self;


- (void)encodeWithCoder:(NSCoder *)coder

    [coder encodeObject:_classes forKey:@"classes"];


- (id)initWithCoder:(NSCoder *)coder

    self = [super init];

    if (self)
    
        _classes = [coder decodeObjectForKey:@"classes"];
    

    return self;


+ (void)saveData

    NSMutableArray *teacherClasses = [[Teacher sharedInstance] classes];
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:teacherClasses];
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:data forKey:@"teacherClasses"];


+ (void)loadData

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *loadClasses= [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"teacherClasses"]];
    if(loadClasses == Nil)
    
        loadClasses = [[NSMutableArray alloc] init];
    

    [[Teacher sharedInstance] setClasses:loadClasses];


- (Teacher *) copyWithZone:(NSZone *)zone

    Teacher *teacher = [[Teacher alloc] init];
    [teacher setClasses:[self classes]];

    return teacher;


@end

谢谢。

【问题讨论】:

【参考方案1】:

如果您希望在 iOS 应用和 Apple Watch 应用之间共享数据,您需要使用 shared container。

【讨论】:

是的,它可以添加共享容器。谢谢。 @matt 我可以在手表应用中使用相同的单例文件和 AFNetworking 文件吗?如果是,请解释一下如何?提前致谢。

以上是关于Apple Watch、WatchKit 和 NSUserDefaults [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Apple Watch (WatchKit) 推送动作

WatchKit 通知:38 毫米 Apple Watch 上的视图被截断?

WatchKit-Programming-Guide-Apple-Watch开发指南官方翻译及总结

是否可以在实际 Apple Watch 设备上运行 WatchKit 应用程序?

WatchKit WatchOS - Apple Watch 上从未显示定位服务提示

Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?