У меня есть простой класс, который использует NSURLSession.Сбой NSURLSession от Swift
class test {
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration());
func f() {
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.value), 0), {() -> Void in
var task = self.session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if error != nil {
// cry
return;
}
var error: NSError? = nil;
var dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as! Dictionary<String, String>;
// use dict
});
task.resume();
});
}
Когда я пытаюсь десериализовать данные как JSON, приложение аварийно завершает работу.
Я определил, что данные, по-видимому, имеют правильную длину, но содержимое выглядит как мусор в отладчике, поэтому мне кажется, что переданный объект данных не работает. Кроме того, я подозреваю, что некоторые удары стека я могу пройти через этот обработчик завершения и увидеть, что это попытка десериализации данных, которые сбой, но когда происходит фактический сбой, стек в отладчике ничего не говорит о обработчике завершения или любом из моих код.
Я видел несколько примеров использования NSURLSession, которые выглядят почти так же, как мои, которые просто работают. Я попытался использовать общий сеанс вместо создания нового, но это тоже не помогло.
Что вызывает этот крах?
Это происходит с определенным URL-адресом? Я имею в виду с возвратом определенного типа данных. Я не говорю «Swift», но разве это из-за «ошибки var», которую вы переопределили? (включен в обработчике 'URLSession' и том, который вы хотите использовать для' NSJSONSerialization')? – Larme
Прежде всего, получите и прочитайте ошибки. Во-вторых, проверьте, действительно ли объект JSON 'Dictionary'. Если он содержит по крайней мере внутренний массив или словарь, это скорее «Словарь ' –
vadian
, попробуйте объявить сеанс внутри функции f. есть хороший шанс, что вы вызываете session.dataTaskWithRequest. 2-й раз до того, как первый раз закончился, и это может привести к сбою. –