我想既然“Watch App”是同一个 iOS 应用程序中的 bundle ,我应该能够在我的 Apple Watch 应用程序中访问 NSUserDefaults。是不是这样?
我似乎无法从我的 iOS 获取 NSUserDefaults 值(我确保它有数据,因为它在 iOS 应用程序中加载良好)。
当我在 Apple Watch 应用中运行它时,它显示为空。我是否无法访问与 iOS 父应用程序相同的 NSUserDefaults 值?
我有一个包含 NSMutalArray 的自定义类。这个可变数组是我想要在 Watch 应用程序的表格中显示的内容。包含 NSMutableArray 的同一类还具有将数据保存到 NSUserDefaults 或从 NSUserDefaults 加载数据的函数。它在我的 iOS 应用程序中运行良好,但只是无法在 Apple Watch 应用程序中加载数据。
我在这里做错了什么或者我不知道什么?
这是类(class):
请记住,我也将它用作单例对象。它通过首先将自身转换为 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
谢谢。
最佳答案
您需要使用 shared container如果您希望在 iOS 应用程序和 Apple Watch 应用程序之间共享数据。
关于ios - Apple Watch、WatchKit 和 NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085879/