gpt4 book ai didi

objective-c - 在 NSDocument 架构中打开文档之前进行验证

转载 作者:行者123 更新时间:2023-12-03 17:37:18 26 4
gpt4 key购买 nike

我有一个基于文档的应用程序,用于格式化 XML 文件。

文档的写入和读取是在我的 NSDocument 子类中完成的

- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError

但如果该文件是无效的 XML,我的应用程序就会崩溃。

所以我实现了:

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename  
{
if(safe){open new document using .....makeDocumentWithContentsOfURL:......}
else{present alert}
}

但是这有很多明显的副作用。我必须重写其他几个方法:

-(BOOL)writeSafelyToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName     forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError  
{
return [self writeToURL:absoluteURL ofType:typeName error:outError];
//return YES;
}

这就是沙滩球光标出现的地方,最终应用程序变得无响应。

在打开文档之前是否有更好的方法来验证文档?

最佳答案

您应该实现 -readFromURL:ofType:error: ,这样它就不会因错误的 XML 而崩溃。这是您应该进行验证的例程。您的代码的哪一部分导致了崩溃,以及它是什么类型的崩溃?

关于 -writeSafelyToURL:ofType:forSaveOperation:error: 中的沙滩球,您可能正在创建一个无限循环。 -writeToURL:ofType:error: 可能会调用 -writeSafelyToURL:....。无论如何,这是一种非常奇怪的重载方式。你想在这里实现什么目标?我不明白重载 -application:openFile: 与您的第一个问题或您描述的重载有何关系。

关于objective-c - 在 NSDocument 架构中打开文档之前进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1294056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com