Я реализовал сохранение на applicationWillTerminate
и загрузку на applicationWillFinishLoading
.
Существует полное дерево объектов, все реализуют протокол NSCoding
, и я проверил типы, которые я ввожу.
Один из классов также хранит NSMutableData
в NSKeyedArchive
, что, я подозреваю, может иногда прерывать разархивирование. Как ни странно, иногда это работает, а иногда нет. Я подозреваю, что некоторый контент в NSMutableData
нарушит архивирование.
Я использую encodeObject на всех объектах, кроме bools и int, где я использую правильный соответствующий метод (encodeBool:forKey:
и encodeInt:forKey:
)
Чтобы быть более ясным: код действительно работает, иногда он может перестроить довольно полный объектный граф, но не всегда.
Я получаю сообщение об ошибке:
initForReadingWithData incomprehensible archive 0x62, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x30
Добавлено: код, который не работает, NSMutableData
10+ МБ
- (void)encodeWithCoder:(NSCoder*)encoder {
[encoder encodeObject:self.encodedMessage forKey:@"EncodedMessage"]; //NSData
[encoder encodeObject:self.data forKey:@"Data"]; //NSMutableData (10+MB)
[encoder encodeObject:self.header forKey:@"Header"]; //NSString
[encoder encodeObject:self.fileName forKey:@"FileName"]; //NSString
[encoder encodeInt:self.dataStartIndex forKey:@"DataStartIndex"]; //int
[encoder encodeInt:self.dataEndIndex forKey:@"DataEndIndex"]; //int
}
- (id)initWithCoder:(NSCoder*)decoder {
if (self = [super init]) {
self.encodedMessage = [decoder decodeObjectForKey:@"EncodedMessage"]; //NSData
self.data = [decoder decodeObjectForKey:@"Data"]; //NSMutableData
self.header = [decoder decodeObjectForKey:@"Header"]; //NSString
self.fileName = [decoder decodeObjectForKey:@"FileName"]; //NSString
self.dataStartIndex = [decoder decodeIntForKey:@"DataStartIndex"]; //int
self.dataEndIndex = [decoder decodeIntForKey:@"DataEndIndex"]; //int
}
return self;
}
Когда я удаляю кодировку и декодирование self.data, он всегда работает.
Это также терпит неудачу с меньшим размером self.data. Не кажется размер, но проблема содержания?
Попытка открыть файл, когда я записал в него nsmutabledata, в корректном редакторе списка отображается ошибка:
"Conversion of string failed. The string is empty."
plutil также выдает эту ошибку:
"$ plutil -lint nzbvortex.state nzbvortex.state: Conversion of string failed. The string is empty."