Как использовать NSCoder

Обычно 'теряемый' эвфемизм для, "Мы прекратили платить разработчику и теперь ему, привычка дает нам исходный код".

Однако я владею копией Средство просмотра ActionScript Burak , и оно работает вполне прилично. Простой поиск Google найдет Вас многими другими декомпиляторами SWF.

5
задан marcy 10 November 2009 в 06:57
поделиться

3 ответа

Используйте -decodeObjectForKey: и прочтите документацию .

7
ответ дан 13 December 2019 в 05:37
поделиться

Вот методы протокола NSCoding из моего объекта LogEntry, вы можете игнорировать оператор switch и детали схемы, они взяты из написанного мною базового класса, что позволяет мне в здравом уме отслеживать изменение форматов данных.

Обратите внимание, что помимо использования decodeObjectForKey: вам также необходимо убедиться, что вы сохраняете / копируете данные значения, поскольку они автоматически освобождаются при получении.

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];

    if (self != nil) {
        switch ([schemaVersion intValue]) {
            case 2:
                filepath = [[coder decodeObjectForKey:@"filepath"] copy];
                identifier = [coder decodeInt64ForKey:@"identifier"];
                level = [coder decodeIntForKey:@"level"];
                lineNumber = [[coder decodeObjectForKey:@"lineNumber"] retain];
                message = [[coder decodeObjectForKey:@"message"] retain];
                timestamp = [[coder decodeObjectForKey:@"timestamp"] retain];
                break;              
            default:
                [self release], self = nil;
                break;
        }
    }

    return self;
}

- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:filepath forKey:@"filepath"];
    [coder encodeInt64:identifier forKey:@"identifier"];
    [coder encodeInt:level forKey:@"level"];
    [coder encodeObject:lineNumber forKey:@"lineNumber"];
    [coder encodeObject:message forKey:@"message"];
    [coder encodeObject:timestamp forKey:@"timestamp"];

    [super encodeWithCoder:coder];
}
3
ответ дан 13 December 2019 в 05:37
поделиться

I думаю, вам следует использовать -decodeObjectForKey:

2
ответ дан 13 December 2019 в 05:37
поделиться