Как сериализовать объект, содержащий NSData? - PullRequest
1 голос
/ 09 апреля 2010

Я пытаюсь сериализовать объект, содержащий несколько полей данных ... где одно из полей имеет тип данных NSData, который не будет сериализован. Я следовал инструкциям на http://www.isolated.se, но мой код (см. Ниже) приводит к ошибке «[NSConcreteData data]: нераспознанный селектор отправлен на экземпляр ...». Как мне сериализовать мой объект?

Заголовочный файл:

@interface Donkey : NSObject<NSCoding>
{
   NSString* s;
   NSData* d;
}

@property (nonatomic, retain) NSString* s;
@property (nonatomic, retain) NSData* d;

- (NSData*) serialize;

@end

Файл реализации:

@implementation Donkey

@synthesize s, d;

static NSString* const KEY_S = @"string";
static NSString* const KEY_D = @"data";

- (void) encodeWithCoder:(NSCoder*)coder
{
    [coder encodeObject:self.s forKey:KEY_S];
    [coder encodeObject:self.d forKey:KEY_D];
}

- (id) initWithCoder:(NSCoder*)coder;
{
    if(self = [super init])
    {
        self.s = [coder decodeObjectForKey:KEY_S];
        self.d = [coder decodeObjectForKey:KEY_D];
    }

    return self;
}

- (NSData*) serialize
{
    return [NSKeyedArchiver archivedDataWithRootObject:self];
}

@end

1 Ответ

0 голосов
/ 09 апреля 2010

Ваша проблема, скорее всего, связана с конфликтом имен, вызванным использованием data в качестве имени свойства, потому что в противном случае код выглядит нормально, и NSString и NSData должны легко сериализоваться

Попробуйте рефакторинг data в нечто вроде "theData" или "myData" и посмотрите, решится ли проблема.

...