0_ os_lock_повреждение_аборт в NSURLProtocol

Я создал собственный NSURLProtocol, который используется WebView во время просмотра. Но, казалось бы, в случайное время (между 20 секундами или несколькими минутами просмотра) я получаю EXC_BREAKPOINT, и приложение перестает работать в моем NSURLProtocol.

Соответствующая часть моего NSURLProtocol приведена ниже, это последняя строка, которая показывает 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)

Ошибка Xcode видна ниже: введите здесь описание изображения

Я совершенно сбит с толку в этом вопросе. Кто-нибудь знает, что может быть причиной этого, и как это исправить?

Благодарю вас!

Сэм


person Sam Heather    schedule 07.05.2016    source источник
comment
Такой же сбой в производстве, хотя я не думаю, что мы когда-либо видели это локально. Озадачен и этим.   -  person Stepan Hruda    schedule 23.08.2016
comment
@ Сэм Хизер, тебе удалось найти решение для этого. Я также сталкиваюсь с той же проблемой.   -  person Gyanendra    schedule 21.12.2016
comment
@Gyanendra до сих пор нет решения, извините   -  person Sam Heather    schedule 21.12.2016


Ответы (1)


Мне не хватает контекста, чтобы полностью понять код здесь, не говоря уже о том, чтобы догадаться, что не так, но в основном происходит то, что есть блокировка (мьютекс), которая была освобождена, но все еще используется где-то внизу в стеке NSURL*.

Это, вероятно, указывает на то, что что-то не сохраняется должным образом, но никто не знает, что и где. Возможно даже, что ваш протокол не сохраняется должным образом, и в этом случае вы можете исправить это, назначив свой объект протокола свойству самого себя до тех пор, пока вы не вызовете свой последний метод делегата, а затем обнулите его.

С учетом сказанного есть основания полагать, что это ошибка в самой ОС, поэтому, пока вы пытаетесь обойти ее, вы также должны сообщить об ошибке. Он будет обманут другой дюжиной или около того ошибок от других людей, которые задавали тот же вопрос как здесь, так и на форумах разработчиков Apple. :-)

person dgatwood    schedule 08.05.2016