2016-06-01 14 views
2

Ich verwende SKProductsRequest, um Produktinformationen aus dem App Store herunterzuladen. Wenn ich einen Konnektivitätsverlust auf meinem Gerät zu testen, schlägt die Anforderung fehl, aber meine App stürzt im SKRequestDelegate, wenn ich versuche zu NSLog den Fehler:Warum SKProductsRequestDelegate/SKRequestDelegate didFailWithError löst EXC_BAD_ACCESS auf NSError aus?

crash

Was mache ich falsch? Ein weiteres Kuriosum für mich ist, dass Expression Inspektor der Lage ist, NSError.debugDescription anzuzeigen ...

Es schlägt auf der ersten Anforderung, so gibt es keinen möglichen Fehler in Bezug auf Mehrfachverwendung von Produktanfrag Variable (die eine starke ref in meinem Swift Klasse).

Antwort

2

Ich habe endlich den Grund gefunden. Es ist nicht verwandt mit SKProductsRequest!

Ich denke, es ein übler Bug mit NSLog und String-Interpolation ist, weil, wenn ich ersetzen:

NSLog("Failed: \(error.debugDescription)") 

von

print("Failed: \(error.debugDescription)") 

alles ist in Ordnung!

Offenbar kann der Inhalt der Fehlermeldung eine EXC_BAD_ADDRESS in NSLog provozieren (auch ohne String-Interpolation tatsächlich: NSLog(error.debugDescription) scheitert auch).


Verwandte anwser: https://stackoverflow.com/a/29631505/249742

NSLog("%@", error.debugDescription)

scheint in allen Fällen gut zu funktionieren.

Vielleicht NSLog(variable) ist ein Missbrauch von NSLog, aber ich denke, NSLog(\(variable)) sollte wie NSLog("%@", variable) interpretiert werden. Sonst gibt es keine zuverlässige Möglichkeit, Strings mit NSLog zu interpolieren, indem der schnelle Weg \() verwendet wird.