initWithCoder не работает, как ожидалось? - PullRequest
0 голосов
/ 15 марта 2010

Кажется ли это правильным, dataFilePath находится на диске и содержит правильные данные, но массив MSMutable не содержит никаких объектов после initWithCoder? Я, наверное, просто что-то упустил, но я хотел бы быстро проверить здесь, прежде чем двигаться дальше.

-(id)initWithCoder:(NSCoder *)decoder {
    self = [super init];
    if(self) {
        [self setReactorCore:[decoder decodeObjectForKey:@"CORE"]];
    }
    return self;
}

.

-(id)init {
    self = [super init];
    if(self) {
        if([[NSFileManager defaultManager] fileExistsAtPath:[self dataFilePath]]) {
            NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
            NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
            NSMutableArray *newCore = [[NSMutableArray alloc] initWithCoder:unArchiver];
            [self setReactorCore:newCore];
            [newCore release];
            [data release];
            [unArchiver release];
        } else {
            NSMutableArray *newCore = [[NSMutableArray alloc] init];
            [self setReactorCore:newCore];
            [newCore release];
        }
    }
    return self;
}

EDIT_001

Мне кажется, я знаю, в чем проблема, я архивирую NSData, а затем пытаюсь инициализировать мой массив NSMutable. Я переработаю код и отправлю обратно с обновлением.

* 1013 Гэри *

Ответы [ 2 ]

1 голос
/ 15 марта 2010

Я не понимаю, почему вы так поступаете. Вы обычно не звоните initWithCoder: самостоятельно. Вы спрашиваете кодировщика о его содержимом, и он создает объекты для вас. Вся часть этого метода для декодирования должна быть id archivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]], где archivedObject - это, по-видимому, массив, который вы называете newCore в своем коде (я не знаю содержимого файла, поэтому я просто догадываюсь, что писал). В этом случае вы захотите mutableCopy, так как я не думаю, что NS * Archiver сохраняет изменчивость.

Я также надеюсь, что вы не ожидаете, что ваш initWithCoder: метод, который вы написали в верхней части своего поста, будет вызван, когда этот NSArray разархивирован.

0 голосов
/ 07 июля 2010

"Я также надеюсь, что вы не ожидаете, что ваш initWithCoder: метод, который вы написали в верхней части своего поста, будет вызван, когда этот NSArray разархивирован."

не полезно. Почему ты не можешь написать, почему это не называется? Спасибо

EDIT: Фактически, если объекты в вашем массиве реализуют NSCoding, initWithCoding вызывается для каждого из них при восстановлении массива (восстановление здесь означает, что вы вызываете [decoder decodeObjectForKey: @ "yourArray"]). Я на самом деле делаю это в своем собственном коде. Поэтому я думаю, что вы написали ложь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...