1

В проекте, который я должен сделать, Я работаю с внешними аксессуарами и каркасом ExternalAccessory.Объектив C - Магазин EAAccessory для NSUserDefaults

(я могу подключиться к один и только один аксессуар).

Соединение легко, отправка данных не очень сложна.

Одна вещь, которую я хотел бы сделать, - сохранить в памяти последнее подключенное устройство, чтобы попытаться снова подключиться к нему при повторном запуске приложения. (после ухода, поэтому после первого запуска.)

Итак, моя проблема заключается в том, что EAAccessory является пользовательским объектом класса и не может быть сохранена в NSUserDefaults.

Я видел этот вопрос для хранения пользовательских объектов:

How to store custom objects in NSUserDefaults

Так что я бы создать NSData с ним, но не удалось, потому что EAAccessory не реализует encodeWithCoder и методы initWithCoder ...

Есть идеи? Для этого или другим способом обработки?

ответ

0

Вы должны хранить логически/значимым образом, чтобы иметь смысл всех важных и сохраняющихся свойств экземпляра EAAcessory в NSDictionary и хранить этот словарь в NSUserDefaults. Затем вам нужно будет прочитать этот словарь и выполнить обратное преобразование (присвоить экземпляр EAAccessory, установить его свойства и т. Д.)

+0

Конечно, но я думаю, что я могу сделать что-то проще :) –

+0

Не совсем. Вот как работает эта логика. Как вы думаете, была ли закодирована реализация кодированных классов encodeWithCoder: и т. Д.? ;) –

+0

Да, вот почему мне нравятся эти классы или методы, которые упрощают мою жизнь :) Я разработчик, поэтому я не хочу слишком много кода ...;) –

0

Я думаю, что вы можете внедрить недостающие методы в пользовательскую категорию EAAccessory. Может быть Somthing так:

*** interface 
@interface EAAccessory (CodecAdditions) 
- (void)encodeWithCoder:(NSCoder *)aCoder; 
- (id)initWithCoder:(NSCoder *)aDecoder; 
@end 

*** implementation 
- (void)encodeWithCoder:(NSCoder *)aCoder 
{ 
    [aCoder encodeInt:[self name] forKey:@"name"]; 
    [aCoder encodeInt:[self manufacturer] forKey:@"manufacturer"]; 
    ... 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self.name = [aDecoder decodeIntForKey:@"name"]; 
    self.manufacturer = [aDecoder decodeIntForKey:@"manufacturer"; 
    ... 

    return self; 
} 
+0

Хорошо, я пробовал что-то вроде этого, но в функции инициализации, я бы начал с: само = [супер Init] если (Я) { ... } и получил и ошибка, потому что EAAccessory не имеет родительского класса. Я попробую еще раз! –

+0

Hummmm после другой попытки, это решение не работает, поскольку свойства EAAccessory доступны только для чтения. Так что я не могу сделать self.name = ... –