2014-01-14 13 views
5

Ich sehe einen Absturz in RKNSJSONSerialization nur auf iOS 6 - nicht auf iOS 7. Ich benutze RestKit 0.20.3 und es passiert ziemlich konsequent für mich. Auch wenn ich den gleichen Antrag machen und die gleiche Antwort für iOS 6/7 erhalten, es funktioniert gut auf iOS 7 aber stürzt auf iOS 6.Warum stürzt RKNSJSONSerialization auf iOS 6 ab?

Hier ist der Absturz - es ist ein EXC_BAD_ACCESS: http://crashes.to/s/2610b639062

Die entsprechende (Absturz) Linie in RestKit der RKNSJSONSerialization ist die Rückkehr:

+ (id)objectFromData:(NSData *)data error:(NSError **)error 
{ 
    return [NSJSONSerialization JSONObjectWithData:data options:0 error:error]; 
} 

So ist es vielleicht gar nicht RestKit - vielleicht ist es NSJSONSerialization.

profilierte ich die Anwendung mit dem Werkzeug Zombies und fanden diese:

"An Objective-C-Nachricht an einen ausgeplanten 'CFString (unveränderliche)' Objekt gesendet wurde (zombie) bei der Adresse. 0x16851250"

Mache ich etwas falsch?

+0

Wahrscheinlich haben Sie irgendeine Art von Zombie-Problem. –

+0

Nicht sicher, dass dies helfen würde, da es Teil von RestKit ist, aber sollte es nicht sein: 'return [NSJSONSerialization JSONObjectWithData: Datenoptionen: 0 Fehler: & Fehler];'? – btomw

+0

@btomw Danke für den Vorschlag, aber ich glaube nicht, dass das das Problem ist (siehe aktualisierten Code). –

Antwort

3

Ich habe das gelöst. Das Problem war, dass mein JSON doppelte Schlüssel enthielt und iOS 6 konnte damit nicht umgehen. Die Lösung besteht darin, die doppelten Schlüssel aus dem JSON zu entfernen, bevor versucht wird, sie mit NSJSONSerialization auf iOS 6 zu analysieren. Anscheinend hat Apple dieses Problem auf iOS 7 gelöst, da es dort nicht abstürzt.

Verwandte: NSJSONSerialization bug?

0

Dies scheint ein Tippfehler zu sein.

Angenommen, es ein Objekt des Typs errorNSError genannt ist, nimmt der Anruf JSONObjectWithData: einen Zeiger auf einen Zeiger als letztes Argument, das heißt mit &.

return [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
+0

Danke - Ich habe die Frage mit mehr Code aktualisiert, um zu zeigen, dass RestKit tatsächlich einen Zeiger auf einen Zeiger übergibt. –

+0

Sicher, wenn es irgendwo einen Fehler in der Behandlung von "Fehler" gibt, würde das tun. –

Verwandte Themen