私はXMLファイルをフォーマットする文書ベースのアプリケーションを持っています。NSDocumentアーキテクチャで文書を開く前に妥当性確認
ライティングや原稿の読み取りは、私の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;
}
これはビーチボールのカーソルが表示され、最終的にアプリケーションが応答しなくなる場所です。
オープンする前に文書を検証する良い方法はありますか?
これは私が以前にやったことですが、悪いXMLは、アプリcreash なります - (BOOL)readFromURL:=(NSError **)outError NSXMLDocument * XMLDOC:(NSURL *)absoluteURL ofType:(NSStringの*)型名エラーを[NSXMLDocument ALLOC] initWithXMLString:文字列オプション:NSXMLNodePreserveWhitespaceエラー:&err]; (ERR) {戻り、NOであれば、 } else { 何かをする.. return YES; } } これ以上実装することは何もわかりません... –
クラッシュは何ですか? –
Rajesh:エラーリターンをどう扱うかはわかりません。 'xmlDoc'が' nil'であるかどうかをテストします。 * 'err'変数を調べると、' nil' *の場合のみです。また、あなたの質問にクラッシュログを編集してください。 –