2009-10-22 1 views
5

Хорошо, я вернусь к этой задаче. Я правильно загружаю XML с моего веб-сервера с URL-адресом, указывающим на файл сервера, однако, когда я обнаруживаю, что сеть «недоступна», я просто указываю URL-адрес локальному XML-файлу моего приложения, и я получаю следующую ошибку (NB, файл прямая копия той, которая находится на сервере).В чем смысл ошибки NSXMLParserErrorDomain 5.?

Я не могу найти подробное описание, но я думаю, что это говорит о том, что URL-адрес указывает на недоступное место. Я храню этот ресурс в неправильном месте? Я думаю, что хочу это в HomeDirectory/Library ??

отладочный вывод

 
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.) 

ответ

4

По словам Дейва Делонг,

Это означает, что он возникли проблемы синтаксического анализа файла.

Я думаю, что это может быть ссылка XSLT в XML - так как она указывает на веб-сервер. Я рассмотрю и вернусь к этому вопросу с улучшенным ответом.

Это путь к файлу. Мой код не был даже близко к правильному местоположению - и мне не хватало завершающего письма. Определение кода ошибки подразумевает «преждевременный конец файла», из-за чего я урезал свой файл без каких-либо успехов. Затем я вернулся к основам и повторил файловую систему, чтобы найти файл.

Я отлаживал использование NSFileManager для итерации к моему файлу, а затем подтвердил, что он можно загрузить с помощью метода contentsAtPath. Я смог сбросить его с помощью NSLog(). Как только я убедился, что файл был хорошо сформирован и загружен в необработанном виде, я убедился, что мой NSURL был построен с тем же синтаксисом и методами. Затем он загрузится правильно. Теперь я могу загрузить либо сетевой файл «полнофункциональный» контент, либо локальный «образец» контента.

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); 
    } 
} 

Выход

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

P.S. Надеюсь, что мое явное объяснение полезно для других, поскольку они отлаживают обработку данных.

+0

BTW - Я позже нашел перечисления в документации SDK.Это очень полезно, хотя и не полностью интуитивно. – mobibob

+1

У меня была аналогичная проблема, потому что я загружал свой файл, используя '[NSURL URLWithString: pathToFile]; 'Вместо этого это должно быть:' [NSURL fileURLWithPath: pathToFile]; 'я слишком долго искал, как мой файл может быть не совсем сформирован, может отсутствовать и т. Д., Прежде чем понять, что это была такая простая тонкая разница. NO также не работает со мной ... все еще я получаю ошибку нет 5. – 2011-08-12 13:24:45

7

объяснений от Apple, является: 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 

И объяснений от ошибки:

NSXMLParserPrematureDocumentEndError 

The document ended unexpectedly. 

Available in Mac OS X v10.3 and later. 

Declared in NSXMLParser.h. 
+0

Спасибо Майкл. По-видимому, ошибка также возвращается, когда имя файла неверно. Ответ от Дейва ДеЛонга (см. Выше) привел меня к моей ошибке. Я также отметил, что нашел документацию. – mobibob

15

В том же ключе, как принято отвечать, у меня была аналогичная проблема, потому что я был загружен файл, используя:

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

Ins TEAD, что должно быть:

[NSURL fileURLWithPath:pathToFile]; 

Я слишком долго, глядя на то, как мой файл не может быть хорошо сформированы, может отсутствовать, и т.д., прежде чем понял, что это было такое простое тонкое различие.

+3

Yup! Эта разница тонкая и похоронена в документах. Хорошая идея подчеркнуть. +1 – mobibob

 Смежные вопросы

  • Нет связанных вопросов^_^