我有一个基于文档的应用程序,它可以格式化 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;
}
这就是沙滩球光标出现的地方,最终应用程序变得无响应。
有没有更好的方法在打开之前验证文档?