2012-06-28 6 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 "을로드 할 수 없다는 오류 창이 나타납니다. 이 오류가 어디서 발생했는지 찾을 수 없습니다.

누구로부터 정보를 얻었는지 알 수 있습니까?

감사

답변

1

당신은 readFromData에서 YES 또는 NO 반환되지 않는 것 같습니다 :

- (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

가! 이제 나는 어리 석다. 그것을 잡아 주셔서 감사합니다. 나는 Envoy (envoy.scribbleware.net)의 다음 버전을 작성하고있다. – Tangler

+0

@LeeWalsh 문제 없습니다. 문제가 해결되면 답변을 수락하십시오. Mac 용 체스 제품이 충분하지 않아 잘되었습니다! – trojanfoe