Ich habe eine dokumentbasierte Anwendung, die eine XML-Datei formatiert.Überprüfen Sie vor dem Öffnen eines Dokuments in NSDocument-Architektur
Schreiben und Lesen von Dokumenten wird in meiner NSDocument Unterklasse getan
- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
aber, wenn die Datei eine ungültige XML ist, ist meine App einfach abstürzt.
So implementiert I:
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
if(safe){open new document using .....makeDocumentWithContentsOfURL:......}
else{present alert}
}
Aber es gibt viele offensichtliche Nebenwirkungen mit diesem. Ich habe einige andere Methoden außer Kraft zu setzen:
-(BOOL)writeSafelyToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError
{
return [self writeToURL:absoluteURL ofType:typeName error:outError];
//return YES;
}
Und das ist, wo der Strand-Ball Cursor erscheint und schließlich die Anwendung reagiert nicht mehr.
Gibt es eine bessere Möglichkeit, das Dokument vor dem Öffnen zu validieren?
Dies ist, was ich früher getan hat, aber schlecht XML macht die App creash - (BOOL) readfromurl: (NSURL *) absoluteURL ofType: (NSString *) Typname Fehler: (NSError **) outError NSXMLDocument * xmlDoc = [[NSXMLDocument-Zuordnung] initWithXMLString: Zeichenfolge Optionen: NSXMLNodePreserveWhitespace Fehler: &err]; if (err) { Rückgabe NO; } sonst { etwas tun .. zurück JA; } } Ich weiß nicht, was mehr als das zu implementieren ... –
Und was war der Absturz? –
Rajesh: So behandeln Sie eine Fehlerrückgabe nicht. Testen Sie, ob 'xmlDoc'' nil' ist; * Nur wenn es "nil" ist, sollten Sie die Variable 'err' untersuchen. Bitte bearbeiten Sie das Crash-Log auch in Ihre Frage. –