我覺得「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