NSCoder - кодирование массива с несколькими уровнями вложенных массивов - PullRequest
3 голосов
/ 18 февраля 2012

У меня есть mainObjectArray (NSMutableArray), который заполняется экземплярами пользовательского класса.Каждый экземпляр сам по себе является массивом, а объектами в каждом массиве являются NSDates, NSStrings, BOOL и другие массивы, содержащие похожие объекты.

То, что я не смог установить, - возможно ли это сделать внутри

- (void)encodeWithCoder:(NSCoder *)encoder 

метод, чтобы просто сказать что-то вроде этого:

[encoder encodeWithObject:mainObjectArray];

Или нужно кодировать каждый объект в каждом экземпляре отдельно?Это было бы немного больно ...

Ваша помощь была бы очень признательна.

1 Ответ

5 голосов
/ 18 февраля 2012

Просто реализуйте методы кодирования и декодирования в своем пользовательском классе.Что будет делать.Пример:

- (void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:[NSNumber numberWithInt:pageNumber] forKey:@"pageNumber"];
    [encoder encodeObject:path forKey:@"path"];
    [encoder encodeObject:array forKey:@"array"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if(self = [super init]) 
    {
        self.pageNumber = [[aDecoder decodeObjectForKey:@"pageNumber"] intValue];
        self.path = [aDecoder decodeObjectForKey:@"path"];
        self.array = [aDecoder decodeObjectForKey:@"array"];
    }
}

Вы можете видеть, что кодируются и декодируются полностью три типа данных - int, string, array.

Надеюсь, это поможет.

...