Domanda

I accedere a un URL riposante e tornare risultati. I risultati sono in JSON. Mi giro la risposta in una stringa tramite:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

La variabile json ha un valore di 0x0. Quando ho mouse su di esso, vedo <Invalid CFStringRef>. Come posso eseguire il debug di questo per dire il motivo per cui non è valido? I rendere il JSON restituito tramite il browser in un parser JSON. Che controlla bene.

I risultati sono restituiti inserendo un ID nell'URL. Altri ID restituiscono i risultati senza alcun problema. Il set di risultati è abbastanza grande.

È stato utile?

Soluzione

Per prima cosa vorrei usare initWithData:encoding: per impostare il NSString. Piccola differenza, ma questo metodo è lì per un motivo.

Poi, vorrei fare un hexdump di self.receivedData per vedere che cosa è in realtà in là. Se i dati non è correttamente UTF8 codificata poi il initWithData:encoding: fallirà.

(Google per NSData dump esadecimale per trovare funzioni di utilità di altre persone per fare questo)

Ho scoperto che a volte i servizi web sono sciatta con la loro codifica. Così io di solito attuare un ripiego in questo modo:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

E 'un po' triste che questo è richiesta ma molti servizi web non sono scritti o configurato correttamente.

Altri suggerimenti

Utilizza NSLog a guardare il byte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top