NSKeyedArchiver и NSValue — как архивировать?

Как мне заархивировать массив NSValues? Какие преобразования я должен сделать, чтобы сделать это? Он не будет архивировать его как есть.

Код:

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver 
archivedDataWithRootObject:[[NSArray alloc] initWithArray:drawingsArray]] 
forKey:@"NSValuesArray"];

Ошибка:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedArchiver encodeValueOfObjCType:at:]: this archiver cannot encode structs'

Данные массива:

drawingsArray (
    (
    NSPoint: {439, 280},
    NSPoint: {439, 280},
    NSPoint: {439, 287},
    NSPoint: {438.62, 290.104},
    NSPoint: {439, 293}
)

)


person Sharief    schedule 24.04.2010    source источник
comment
Согласно документации, NSValue реализует протокол NSCoding, поэтому он должен работать нормально. В чем проблема?   -  person Carl Norum    schedule 25.04.2010
comment
Я разместил код, пожалуйста, смотрите его выше.   -  person Sharief    schedule 25.04.2010


Ответы (1)


Вам не нужно использовать NSKeyedArchiver. Вместо этого просто скажите [[NSUserDefaults standardUserDefaults] setObject:valueArray forKey:@"valueArray"]. Архивация будет выполнена автоматически. Посмотрите, работает ли это.

EDIT: я думаю, что ваша конкретная проблема связана с использованием archivedDataWithRootObject:. Вам не нужно его использовать, так как NSArray соответствует NSCoder -- дочерние объекты также будут автоматически заархивированы.

person shosti    schedule 24.04.2010
comment
У меня тоже есть эта проблема. NSPoint — это структура, NSKeyedArchiver не может кодировать структуры. - person Luke Mcneice; 27.10.2010