2

我想既然“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

谢谢。

4

1 回答 1

5

如果您希望在 iOS 应用程序和 Apple Watch 应用程序之间共享数据,则需要使用共享容器。

于 2014-11-23T05:31:19.503 回答