我觉得“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
谢谢。
是的,它工作在添加共享容器。谢谢。 – 2014-11-24 16:49:51
@matt s我可以在我的手表应用程序中使用相同的singleton文件和AFNetworking文件吗?如果是,请解释我如何?先谢谢了。 – ilesh 2015-05-04 06:24:36