Pergunta

Ok, estou de volta a esta tarefa. Eu tenho o meu XML baixar corretamente do meu servidor Web com um apontador URL para arquivos do servidor, no entanto, quando eu detectar a rede é 'inacessível' Eu simplesmente apontar a URL para XML local do meu aplicativo e eu recebo o seguinte erro (NB o arquivo é uma cópia direta do um no servidor).

Não consigo encontrar a descrição detalhada, mas acho que ele está dizendo que a URL está apontando para um local inacessível. Estou armazenar este recurso no local errado? Eu acho que eu quero na HomeDirectory / Library ??

saída de depuração

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.)
Foi útil?

Solução 3

De acordo com Dave DeLong,

Isso significa que ele está tendo problemas ao analisar o arquivo.

Eu acho que pode ser a referência XSLT no XML - uma vez que aponta para o servidor web. Vou rever e voltar a esta pergunta com uma resposta melhorada.

Foi o caminho do arquivo. Meu código não era mesmo perto do local certo - e eu estava faltando uma carta à direita 's'. A definição do código de erro implica um "fim prematuro de arquivo", o que me levou a truncar o meu arquivo sem qualquer sucesso. Então eu fui voltar ao básico e iterado no sistema de arquivos para olhar para o meu arquivo.

Eu depurado usando a NSFileManager para iterate para o meu arquivo e, em seguida, verificou-se que era carregável com o contentsAtPath método. Eu era capaz de despejá-lo com NSLog (). Uma vez que foi convencido de que o processo foi bem-formado e colocado na forma em bruto, que se assegurou que a minha NSURL foi construído com a mesma sintaxe e métodos. Em seguida, ele colocado correctamente. Agora eu posso carregar um arquivo de rede de conteúdo "full-featured" ou um conteúdo local "amostra".

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

saída

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

P.S. Espero que o meu ser explícito aqui é útil para outras pessoas como eles depurar seu processamento de dados.

Outras dicas

Ao longo das mesmas linhas como a resposta aceita, eu tive um problema semelhante porque eu estava carregando meu arquivo usando:

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

Em vez disso, que deve ser:

[NSURL fileURLWithPath:pathToFile];

Eu também passei um longo tempo olhando como meu arquivo não pode ser bem formado, pode estar faltando, etc antes de perceber que era uma sutil diferença tão simples.

A explicação da 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

E a explicação do erro é:

NSXMLParserPrematureDocumentEndError

The document ended unexpectedly.

Available in Mac OS X v10.3 and later.

Declared in NSXMLParser.h.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top