В чем смысл ошибки NSXMLParserErrorDomain 5.? - PullRequest
5 голосов
/ 22 октября 2009

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

Я не могу найти подробное описание, но я думаю, что это говорит о том, что 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.)

Ответы [ 3 ]

15 голосов
/ 27 ноября 2010

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

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

Вместо этого должно быть:

[NSURL fileURLWithPath:pathToFile];

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

7 голосов
/ 03 мая 2010

Объяснение от 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.
4 голосов
/ 22 октября 2009

Согласно Дэйву Делонгу,

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

Я думаю, что это может быть ссылка 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. Я надеюсь, что мои откровенные высказывания здесь полезны для других, поскольку они отлаживают свою обработку данных.

...