2015-09-26 4 views
0

это мой PHP-файл с сервера:Синтаксического перекручивание через JSon массив в быстрой

<?php 

    $results = Array(
     Array(
      "name"  => "William", 
      "location" => "UK", 
      "action" => "Post Update" 
     ), 
     Array(
      "name"  => "Sammy", 
      "location" => "US", 
      "action" => "posted news" 
     ) 
    ); 

    header("Content-Type: application/json"); 
    echo json_encode($results); 
?> 

И это, как я пытаюсь извлечь массив JSON из в быстром

let urlPath = "http://someurltophpserver" 
     let url = NSURL(string: urlPath) 
     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in 
      if ((error) != nil) { 
       println("Error") 
      } else { 
       let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 
       // do something with the data 
      } 
     }) 
     task.resume() 

Приложения прекращает работу в этой строке let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary с ошибкой:

Could not cast value of type '__NSArrayM' (0x8c9b58) to 'NSDictionary' (0x8c9d74). 

Новый Свифт и запрос HTTP, поэтому не совсем s что это означает.

ответ

1

Причина, по которой ваше приложение рушится, связано с as!. Вы пытаетесь принудительно отключить разворот, поэтому, если это не удастся во время выполнения, приложение выйдет из строя.

Изменение линии к этому:

if let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary 
{ 
    // Do stuff if jsonResult set with a value of type NSDictionary 
} 

Это остановит Падает, но судя по его объект верхнего уровня возвращаемый JSON serialiser собирается быть NSArray не NSDictionary вы, кажется, чтобы ожидать, это, вероятно, почему приложение фактически crashing. Вы код говорит компилятору «let jsonResult равным значению, которое определенно будет NSDictionary».

Кроме того, в качестве стороны, я бы порекомендовал самый простой способ загрузить некоторые данные с помощью NSData(contentsOfURL:url). Запустите это в фоновом режиме, используя Grand Central Dispatch, чтобы избежать блокировки основного потока (UI).

Смежные вопросы