2012-05-10 1 views
3

У меня есть Objective-C класс, который реализует NSCoding. Мне нужно вернуть представление экземпляра этого класса в виде NSDictionary, где ключи являются именами свойств, а значениями являются значения свойств.Как использовать NSCoding для преобразования объекта в NSDictionary?

Как сделать это преобразование в Objective-C?

ответ

3

Необходимо создать подкласс NSCoder, методы encode<thing>:forKey: которого вставляют thing s в словарь, который затем можно извлечь.

@implementation DriisDictCoder 
{ 
    NSMutableDictionary * encodedDict; 
} 

- (void)encodeDouble: (double)v forKey: (NSString *)k { 
    [codedDict addObject:[NSNumber numberWithDouble:v] forKey:k]; 
} 

// etc. 

// Custom method 
- (NSDictionary *)dictForEncodedObject { 
    return encodedDict; 
} 

@end 

Затем создается экземпляр вашего кодера, и отправить encodeWithCoder: к этому объекту, который в словаре.

+0

Спасибо, это подход, который я в конечном итоге взял. – driis

8

NSObject имеет способ dictionaryWithValuesForKeys:. Из документации:

Возвращает словарь, содержащий значения свойств, идентифицированные каждым из ключей в данном массиве.

Существует также соответствующий метод -setValuesForKeysWithDictionary:.

NSCoding на самом деле не играет здесь.

+0

Это не метод 'NSObject'; это из протокола кодирования по значению ключа. –

+0

@ Jacques Cousteau вы уверены? Может ли протокол иметь реализацию? Я бы сказал, что он реализован в NSObject, а также может быть также перезаписан в других объектах фундамента (например, NSArray). –

+0

Да, я уверен, что это метод KVC. 'NSObject' не документирован как соответствующий KVC. Есть шанс, что так или иначе (это неофициальный протокол ...). Методы протокола должны выполняться каждым классом, если они не наследуются. –

0

Что сказал Эндрю Мэдсен. Если вы хотите использовать NSCoding, вам придется закодировать свой объект на объект NSData, используя NSKeyedArchiver, и поместите NSData в свой словарь. Хотя бы это было бы невозможно для человека, если это вызывает беспокойство. Cheers

Редактировать: повторное чтение вашего вопроса, это действительно то, что сказал Андрей, поскольку вы хотите 1: 1 представление ключа: значения в словаре - подход NSCoding даст вам весь объект в качестве значения для вашего словарного ключа. Итак, +1 к Эндрю.

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