Ich habe einen HTTP-Client erstellt, der Webdienste zum Synchronisieren von Informationen zwischen dem Client und dem Server verwendet. Ich habe Blocks und NSURLConnection verwendet, um dies auf der Client-Seite zu erreichen, aber ich bekomme häufige Abstürze von EXC_BAD_ACCESS in objc_msgSend (). Soweit ich weiß, bedeutet dies normalerweise, dass ein gespeicherter Block, der vom Stapel gefallen ist, aufgerufen wurde. Ich denke, ich habe die Dinge richtig codiert, um das zu vermeiden, aber ich stecke immer noch fest.
Hier ist, was mein Code konzeptionell macht. Es beginnt mit dem Aufruf von "synchronizeWithServer". Diese Methode ruft "listRootObjectsOnServerWithBlock:" auf, das einen Block verwendet, der aufgerufen wird, wenn die Methode zurückkehrt.
"listRootObjectsOnServersWithBlock:" initiiert eine NSURLConnection asynchron zum Webserver. Es erwartet, dass ein Block aufgerufen wird, wenn er zurückkehrt. Innerhalb dieses Blocks möchte ich in der Lage sein, den ursprünglichen Block (so genannt "Block") auszuführen.
Dies ist nur eine vereinfachte Version meines Codes. Der eigentliche Synchronisationsprozess ist komplexer, aber es ist meistens mehr von dem, was Sie unten sehen.
Manchmal funktioniert der Code perfekt, aber etwa 80% der Zeit stürzt er sehr früh in der Routine ab. Es scheint anfälliger für Abstürze zu sein, wenn mein Datensatz größer wird.
%Vor%Tags und Links objective-c grand-central-dispatch objective-c-blocks cocoa asynchronous