Cocoa NSCoding和NSKeyedArchiving-“NSCoding和NSKeyedArchiving”;无法加载文档";

Cocoa NSCoding和NSKeyedArchiving-“NSCoding和NSKeyedArchiving”;无法加载文档";,cocoa,nskeyedarchiver,nsdocument,nscoding,Cocoa,Nskeyedarchiver,Nsdocument,Nscoding,我已经为我的类实现了NSCoding协议,并且在NSDocument子类中使用以下代码来保存和加载: - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { [[record window] endEditingFor:nil]; return [NSKeyedArchiver archivedDataWithRootObject:self]; } } 一切似乎都很顺利。我可以保存一个文件,当我打开它并逐

我已经为我的类实现了
NSCoding
协议,并且在
NSDocument
子类中使用以下代码来保存和加载:

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

}

一切似乎都很顺利。我可以保存一个文件,当我打开它并逐步完成代码时,它看起来都是无归档的,并且解码良好。但是,在“加载事件”完成后,我的应用程序总是弹出一个错误窗口,显示“文档”xxx.xxx“无法加载”。我找不到触发此错误的原因,也找不到任何文档

有人知道它从哪里来,或者知道它可能被记录在哪里吗

谢谢


Lee

您似乎没有从
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;
}

这看起来与国际象棋有关;我可以问一下您在写什么吗?

您似乎没有从
读取数据中返回

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

这看起来与国际象棋有关;我能问一下你在写什么吗?

Gah!现在我觉得自己很愚蠢。不过谢谢你抓住了它。我正在写下一个版本的特使(特使.scribbleware.net)@LeeWalsh没问题。如果答案解决了你的问题,请接受。没有足够的象棋产品供Mac使用,做得好!啊!现在我觉得自己很愚蠢。不过谢谢你抓住了它。我正在写下一个版本的特使(特使.scribbleware.net)@LeeWalsh没问题。如果答案解决了你的问题,请接受。没有足够的象棋产品供Mac使用,做得好!