2014-11-23 71 views
2

我觉得“Watch App”是同一个iOS应用程序中的一个包,我应该可以在Apple Watch App中访问NSUserDefaults。这不是吗?Apple Watch,WatchKit和NSUserDefaults

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

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

我有一个包含NSMutalArray的自定义类。这个可变数组就是我想要在Watch应用程序的Table中显示的数组。这个包含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 

谢谢。

回答

5

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

+0

是的,它工作在添加共享容器。谢谢。 – 2014-11-24 16:49:51

+0

@matt s我可以在我的手表应用程序中使用相同的singleton文件和AFNetworking文件吗?如果是,请解释我如何?先谢谢了。 – ilesh 2015-05-04 06:24:36

相关问题