2012-06-28 29 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]); 

}

這一切似乎是工作的罰款。我可以保存一個文件,當我打開它並逐步完成代碼時,它似乎都可以解壓並解碼。但是,在完成「加載事件」時,我的應用程序總是彈出一個錯誤窗口,顯示「The document」xxx.xxx「無法加載」。我找不到這個錯誤是從哪裏觸發的,也沒有任何文檔。

是否有人知道它來自哪裏或知道它可能記錄在哪裏?

感謝

回答

1

你似乎並沒有從readFromData返回YESNO

- (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.scribbleware.net) – Tangler

+0

@LeeWalsh沒問題。如果解決了您的問題,請接受答案。 Mac上沒有足夠的象棋產品,做得很好! – trojanfoe