2009-10-22 16 views
5

Ok, wracam do tego zadania. Mam poprawnie pobrany plik XML z mojego serwera WWW z adresem URL wskazującym na plik serwera, jednak gdy wykryję, że sieć jest "nieosiągalna", po prostu kieruję URL do lokalnego pliku XML mojej aplikacji i pojawia się następujący błąd (NB plik jest bezpośrednia kopia tego na serwerze).Jakie jest znaczenie błędu NSXMLParserErrorDomain 5.?

Nie mogę znaleźć szczegółowego opisu, ale myślę, że mówi on, że URL wskazuje na niedostępną lokalizację. Czy przechowuję ten zasób w niewłaściwym miejscu? Chyba chcę go w HomeDirectory/Library?

wyjście Debug

 
loadMyXml: /var/mobile/Applications/950569B0-6113-48FC-A184-4F1B67A0510F/MyApp.app/SampleHtml.xml 
2009-10-14 22:08:17.257 MyApp[288:207] Wah! It didn't work. Error Domain=NSXMLParserErrorDomain Code=5 "Operation could not be completed. (NSXMLParserErrorDomain error 5.)" 
2009-10-14 22:08:17.270 MyApp[288:207] Operation could not be completed. (NSXMLParserErrorDomain error 5.) 

Odpowiedz

4

Według Dave DeLong,

To znaczy, że problemy analizowania pliku.

Myślę, że może to być odniesienie XSLT w XML - jak wskazuje na serwer WWW. Przeanalizuję i wrócę do tego pytania z ulepszoną odpowiedzią.

To była ścieżka do pliku. Mój kod nie był nawet bliski właściwej lokalizacji - a ja brakowało mi listu końcowego. Definicja kodu błędu oznacza "przedwczesny koniec pliku", który spowodował, że skróciłem mój plik bez powodzenia. Następnie wróciłem do podstaw i sprawdziłem w systemie plików, aby znaleźć mój plik.

Po debugowaniu za pomocą menedżera NSFileManager przechodzę do mojego pliku, a następnie sprawdzam, czy można go załadować za pomocą metody contentsAtPath. Udało mi się go zrzucić przy pomocy NSLog(). Kiedy byłem przekonany, że plik jest dobrze sformułowany i załadowany w surowej postaci, upewniłem się, że mój NSURL został skonstruowany z taką samą składnią i metodami. Następnie załadowano poprawnie. Teraz mogę załadować plik "w pełni funkcjonalny" w sieci lub lokalną "próbkę" treści.

NSDirectoryEnumerator *dirEnumerator = [[NSFileManager defaultManager] enumeratorAtPath: NSHomeDirectory()]; 
NSString *something; 
NSString *f; 

while(something = [dirEnumerator nextObject]) { 
    f = [[[NSString alloc] initWithFormat: @"%@/%@", NSHomeDirectory(), something] autorelease]; 
    if([f hasSuffix :@"two_cookies.xml"]){ 
    NSData *nsData = (NSData*) [[NSFileManager defaultManager] contentsAtPath: f]; 
     NSLog(@"%@", nsData); 
    } 
} 

Wyjście

2009-10-22 00:47:40.147 MyApp[13843:20b] <?xml version="1.0" encoding="iso-8859-1"?> 

PS: Mam nadzieję, że moje wyraźne tutaj jest pomocne dla innych podczas debugowania przetwarzania danych.

+0

BTW - Później znalazłem wyliczenia w dokumentacji SDK.Jest bardzo pomocny, choć nie do końca intuicyjny. – mobibob

+1

Miałem podobny problem, ponieważ ładowałem plik za pomocą '[NSURL URLWithString: pathToFile]; "Zamiast tego powinno to być:' [NSURL plikURLWithPath: pathToFile]; 'Również zbyt długo spoglądałem na to, jak mój plik może nie być dobrze uformowany, może go brakować itp. Zanim zdałem sobie sprawę, że była to tak prosta subtelna różnica. NO też nie działa ze mną ... nadal dostaję błąd nr 5. –

7

wyjaśnieniu firmy Apple jest: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSXMLParserPrematureDocumentEndError

Parser Error Constants 

The following error types are defined by NSXMLParser. 

typedef enum { 
    NSXMLParserPrematureDocumentEndError = 5 

A wyjaśnieniu błędu jest:

NSXMLParserPrematureDocumentEndError 

The document ended unexpectedly. 

Available in Mac OS X v10.3 and later. 

Declared in NSXMLParser.h. 
+0

Dzięki Michael. Podobno błąd jest zwracany, gdy nazwa pliku jest niepoprawna. Odpowiedź Dave'a DeLonga (patrz wyżej) doprowadziła mnie do mojego błędu. Zauważyłem również, że znalazłem dokumentację. – mobibob

15

Według tych samych zasad jak przyjętym odpowiedź, miałem podobny problem, bo ładował mój plik, używając:

[NSURL URLWithString:pathToFile]; // **Wrong** 

Ins tead, że powinno być:

[NSURL fileURLWithPath:pathToFile]; 

ja też spędził długi czas patrząc jak mój plik nie może być dobrze uformowane, może brakować itp przed zdając sobie sprawy, że to była taka prosta różnica subtelna.

+3

Yup! Ta różnica jest subtelna i pochowana w dokumentach. Dobry pomysł na podkreślenie. +1 – mobibob