2014-11-23 5 views
2

Я понял, что, поскольку приложение «Наблюдение» является пакетом в том же приложении iOS, я должен иметь доступ к NSUserDefaults в своем приложении Apple Watch. Разве это не так?Apple Watch, WatchKit и NSUserDefaults

Я не могу получить значения NSUserDefaults из моего iOS (который, как я убедился, имеет данные, так как он загружается отлично в приложении iOS).

Когда я запускаю его в приложении Apple Watch, он приходит как пустой. У меня нет доступа к тем же значениям NSUserDefaults, что и исходное приложение iOS?

У меня есть пользовательский класс, который содержит NSMutalArray. Этот измененный массив - это то, что я хочу отобразить в таблице в приложении Watch. Этот же класс, который содержит NSMutableArray, также имеет функции сохранения/загрузки данных в/из NSUserDefaults. Он отлично работает в моем приложении iOS, но просто не загружает данные в приложение Apple Watch.

Что я делаю неправильно здесь или о чем я не знаю?

Вот класс:

Имейте в виду, что я использую его как единственный объект тоже. Он сохраняет данные в NSUserDefaults, сначала преобразовывая себя в NSData - вот почему вы видите дополнительные функции в этом классе, которые вы можете просто игнорировать.

#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

Вам необходимо использовать shared container, если вы хотите обмениваться данными между вашим приложением iOS и вашим приложением Apple Watch.

+0

Да, он работал над добавлением общего контейнера. Спасибо. –

+0

@matt s могу ли я использовать один и тот же файл singleton и файлы AFNetworking в приложении для наблюдения за часами? если да, то пожалуйста объясните мне как? Заранее спасибо. – ilesh

Смежные вопросы