0

こんにちは、サーバーから get リクエストを送信しようとしていますが、ログを確認したときにエンドポイントに到達できず、最終エンドポイントに到達していません。エンドポイントには、リクエスト フィールドに追加された承認が必要です。json 値を取得してテーブル セルとして表示しようとしています。しかし、値を取得しようとすると、nil が返されます。エンドポイントに到達しようとはしません。print("Session)"dataWithRequest を呼び出すかどうかを確認するために print ステートメントを配置しようとしましたが、失敗した場合。ここで何か間違ったことをしていますか?

 func getLocalData() -> [[String:AnyObject]] {
        var json:[[String:AnyObject]]?
        let endPoint = "http://******************"

        let url:NSURL? = NSURL(string: endPoint)
        let session = NSURLSession.sharedSession()

        let request:NSMutableURLRequest = NSMutableURLRequest(URL: url!)

        request.HTTPMethod = "GET"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue(token!, forHTTPHeaderField: "Authorization-Header")


        let task = session.dataTaskWithRequest(request) {(data, response, error) -> Void in
            print("Session") //not able to get in here
            guard let data = data where error == nil else {
                //network error
                print("Error with network: \(error?.localizedDescription)")
                return
            }

            let httpResponse = response as! NSHTTPURLResponse//HTTPURLResponse
            let statusCode = httpResponse.statusCode

            if statusCode == 200 {
                do {
                     print("Here buddy")
                     json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]]
                   // return json
                }

                catch {
                  print("Error in json")
                }
            }
        }

        task.resume()

        print("JSON: \(json)") //prints nil as it never attempts to make the request to the server

        return json
 }

私のTableListControllerで、この関数を呼び出そうとすると、fatal error: unexpectedly found nil while unwrapping an Optional value

class DealListController: UITableViewController {
    let myDeals = DealList()
    var dealsArray = []

    override func awakeFromNib() {
        super.awakeFromNib()
         dealsArray = myDeals.getLocalData()! //complains about error here
   }
}
4

1 に答える 1

1

これらのものを Info.plist に追加しましょう ここに画像の説明を入力

更新:値を返す代わりに完了ハンドラを使用しましょう

func getLocalData(completion: (json: [[String:AnyObject]]?) -> Void) {
    let endPoint = "http://******************"

    let url:NSURL? = NSURL(string: endPoint)
    let session = NSURLSession.sharedSession()

    let request:NSMutableURLRequest = NSMutableURLRequest(URL: url!)

    request.HTTPMethod = "GET"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("", forHTTPHeaderField: "Authorization-Header")


    let task = session.dataTaskWithRequest(request) {(data, response, error) -> Void in
        print("Session") //not able to get in here
        guard let data = data where error == nil else {
            //network error
            print("Error with network: \(error?.localizedDescription)")
            completion(json: nil)
            return
        }

        let httpResponse = response as! NSHTTPURLResponse//HTTPURLResponse
        let statusCode = httpResponse.statusCode

        if statusCode == 200 {
            do {
                print("Here buddy")
                let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]]
                // return json
                completion(json: json)
            }

            catch {
                print("Error in json")
                completion(json: nil)
            }
        }
    }

    task.resume()
}

と:

myDeals.getLocalData { json in
    print("json: \(json)")
    dealsArray = json!
}
于 2016-11-06T02:51:55.520 に答える