Frage

ich Zugriff auf eine RESTFUL url und zurück Ergebnisse. Die Ergebnisse sind in JSON. Ich drehe die Antwort in einen String über:

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

Die json Variable hat einen Wert von 0x0. Wenn ich die Maus über sie, ich sehe <Invalid CFStringRef>. Wie kann ich das Debuggen zu sagen, warum es ungültig ist? Ich mache die JSON über den Browser in einem JSON-Parser zurückgegeben. Das Kontrolle in Ordnung.

Die Ergebnisse werden durch die Eingabe einer ID in der URL zurückgegeben. Andere IDs zurückgehen, ohne Frage. Die Ergebnismenge ist ziemlich groß.

War es hilfreich?

Lösung

Zuerst würde ich initWithData:encoding: Setup verwendet das NSString. Kleiner Unterschied, aber das Verfahren ist es für einen Grund.

Dann würde ich eine hexdump von self.receivedData tun, um zu sehen, was dort tatsächlich ist. Wenn diese Daten nicht richtig codiert UTF8 dann wird der initWithData:encoding: versagen.

(Google für NSData Hex-Dump andere Leute Utility-Funktionen zu finden, dies zu tun)

Ich habe festgestellt, dass manchmal Web-Service mit ihrer Codierung schlampig ist. Also habe ich in der Regel einen Rückfall wie folgt implementieren:

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

Es ist irgendwie traurig, dass dies erforderlich ist, aber viele Web-Dienste werden nicht geschrieben oder richtig konfiguriert ist.

Andere Tipps

Verwenden NSLog an dem Bytes zu suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top