2014-11-23 107 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

相關問題