Apple Watch, WatchKit и NSUserDefaults [дубликаты]

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

Кажется, я не могу получить значения 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

Спасибо.


person Mario A Guzman    schedule 23.11.2014    source источник


Ответы (1)


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

person Matt S.    schedule 23.11.2014
comment
Да, это сработало при добавлении общего контейнера. Спасибо. - person Mario A Guzman; 24.11.2014
comment
@matt s, могу ли я использовать один и тот же файл singleton и файлы AFNetworking в своем приложении для часов? если да, то, пожалуйста, объясните мне, как? Заранее спасибо. - person Ilesh P; 04.05.2015