2016-05-07 15 views
1

Ich habe eine benutzerdefinierte NSURLProtocol erstellt, die von einem WebView verwendet wird, während es durchsucht. Aber zu scheinbar zufälligen Zeiten (zwischen 20 Sekunden oder ein paar Minuten im Browser) bekomme ich eine EXC_BREAKPOINT und die App läuft nicht mehr in meinem NSURLProtocol.0_ os_lock_corruption_abort in NSURLProtocol

Der relevante Teil meiner NSURLProtocol unten ist, ist es die letzte Zeile ist, die die EXC_BREAKPOINT

self.mutableData = NSMutableData(data: data!) 
self.response = response 
self.client?.URLProtocol(self, didReceiveResponse: response!, cacheStoragePolicy: NSURLCacheStoragePolicy.Allowed) 
self.client?.URLProtocol(self, didLoadData: data!) 
self.client?.URLProtocolDidFinishLoading(self) 

Der Xcode Fehler zeigt sichtbar unter: enter image description here

ich total auf diesen einen bamboozled bin . Hat jemand eine Idee, was das verursacht und wie man es beheben kann?

Vielen Dank!

Sam

+0

Den gleichen Crash in der Produktion bekommen, obwohl ich glaube nicht, dass wir das jemals lokal gesehen haben. Auch davon verwirrt. –

+0

@Sam Heather haben Sie die Lösung dafür gefunden. Ich stehe auch vor dem gleichen Problem. – Gyanendra

+0

@Gyanendra immer noch keine Lösung, tut mir leid zu sagen –

Antwort

0

Es gibt nicht genug Kontext für mich voll und ganz den Code hier zu verstehen, geschweige denn erraten, was falsch ist, aber im Grunde, was passiert ist, ist, dass es eine Sperre (Mutex), die Zuordnung aufgehoben wurde, aber immer noch verwendet wird, um irgendwo im NSURL * Stack.

Dies deutet wahrscheinlich darauf hin, dass etwas nicht ordnungsgemäß erhalten bleibt, aber es ist eine Vermutung, was oder wo. Es kann sogar sein, dass Ihr Protokoll nicht ordnungsgemäß beibehalten wird. In diesem Fall können Sie es möglicherweise beheben, indem Sie Ihr Protokollobjekt einer Eigenschaft auf sich selbst zuweisen, bis Sie Ihre letzte Delegate-Methode aufgerufen haben.

Mit diesem, gibt es Grund zu der Annahme, dass dies ein Fehler im Betriebssystem selbst ist, also während Sie versuchen, es zu umgehen, sollten Sie auch einen Fehler einreichen. Es wird von den anderen Leuten, die diese Frage sowohl hier als auch in den Apple-Entwicklerforen gestellt haben, zu den anderen Dutzend Bugs verführt. :-)