2012-06-28 9 views
1

я реализовал протокол NSCoding для моих классов, и я использую следующий код в моем NSDocument подкласса для сохранения и загрузки:NSCoding и NSKeyedArchiving - «Документ не может быть загружен»

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { 
[[record window] endEditingFor:nil]; 
return [NSKeyedArchiver archivedDataWithRootObject:self]; 

}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError{ 
@try { 
    NSLog(@"Loading..."); 
    self = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
} 
@catch (NSException *exception) { 
    if (outError) { 
     NSDictionary *d = [NSDictionary dictionaryWithObject:@"The data is corrupted" forKey:NSLocalizedFailureReasonErrorKey]; 
     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:d]; 
    } 
} 
NSLog(@"whiteMoves count: %ld",[whiteMoves count]); 

}

все это, кажется, работает хорошо. Я могу сохранить файл, и когда я его открываю и прохожу через код, все это, похоже, распаковывает и декодирует. Однако по завершении «события загрузки» в моем приложении всегда появляется окно с ошибкой, в котором говорится: «Документ« xxx.xxx »не может быть загружен». Я не могу найти, откуда эта ошибка запускается, и никакой документации по ней.

Знает ли кто-нибудь, откуда он взялся или знает, где он может быть задокументирован?

Благодаря

Lee

ответ

1

Вы, кажется, не будет возвращаться YES или NO из readFromData:

- (BOOL)readFromData:(NSData *)data 
       ofType:(NSString *)typeName 
       error:(NSError **)outError 
{ 
    BOOL retval = YES; 
    @try 
    { 
     NSLog(@"Loading..."); 
     self = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
     NSLog(@"whiteMoves count: %ld",[whiteMoves count]); 
    } 
    @catch (NSException *exception) 
    { 
     if (outError != nil) 
     { 
      NSDictionary *d = [NSDictionary dictionaryWithObject:@"The data is corrupted" forKey:NSLocalizedFailureReasonErrorKey]; 
      *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:d]; 
     } 
     retval = NO; 
    } 

    return retval; 
} 

Это выглядит шахматы связанных; могу я спросить, что вы пишете?

+0

Gah! Теперь я чувствую себя глупо. Спасибо, что поймал его. Я пишу следующую версию посланника (envoy.scribbleware.net) – Tangler

+0

@LeeWalsh Нет проблем. Пожалуйста, примите ответ, если он решит вашу проблему. Недостаточно шахматных продуктов для Mac, так хорошо сделано! – trojanfoe