[swift]Alamofire JSON 请求不从服务器拉数据

发布时间: 2017/3/5 15:54:11
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用 Alamofire 拉一个 JSON 文件从一台服务器 (http://midlandgates.co.uk/JSON/reliveCacheData.json)。要这样做,我有一个 Alamofire 请求功能,应拉下的数据并将它写到一个名为类 JSONDataClass

Alamofire 请求

Alamofire.request(.GET, "http://midlandgates.co.uk/JSON/reliveCacheData.json")
            .response { request, response, data,  error in

                if let data = data {
                    let json = JSON(data:data)

                    for locationData in json {
                        let locationDataJSON = JSONDataClass(json: locationData.1)
                        self.cacheData.append(locationDataJSON)
                    }

                    for title in self.cacheData {
                        print(title.memoryTitle)
                    }
                }

        }

然而我 printLn 不从 JSON 文件的指示与要求或类问题打印数据。然而我新的 swift 似乎不能解决这个问题,感谢所有帮助 !

import Foundation
import CoreLocation
import SwiftyJSON

class JSONDataClass {

    //Location MetaData
    var postUser: String!
    var memoryTitle: String!
    var memoryDescription: String!
    var memoryType: String!
    var memoryEmotion: String!
    var taggedFriends: String!

    //Location LocationalData
    var memoryLocation: CLLocationCoordinate2D

    //MultiMedia AddressData
    var media1: String!
    var media2: String!
    var media3: String!
    var media4: String!
    var media5: String!

    //Writing to varibles
    init(json: JSON) {
        postUser = json["user"].stringValue
        memoryTitle = json["title"].stringValue
        memoryDescription = json["description"].stringValue
        memoryType = json["type"].stringValue
        memoryEmotion = json["emotion"].stringValue
        taggedFriends = json["friends"].stringValue

        memoryLocation = CLLocationCoordinate2D(latitude: json["latitude"].doubleValue, longitude: json["longitude"].doubleValue)

        media1 = json["media1"].stringValue
        media2 = json["media2"].stringValue
        media3 = json["media3"].stringValue
        media4 = json["media4"].stringValue
        media5 = json["media5"].stringValue
    }
}

解决方法 1:

(注︰ JSON 内容的作者有固定他 JSON 基于我的答案 — — 在这篇文章的时候,我的答案是正确的)。


问题是你得回来从服务器无效 JSON。

切换出 SwiftyJSON 代码,并把它包在 try-catch 说明问题︰

Alamofire.request(.GET, "http://midlandgates.co.uk/JSON/reliveCacheData.json")
            .response { request, response, data,  error in
                //print("status \(response)")

            do {

                let myData = try NSJSONSerialization.JSONObjectWithData(data!,
                    options: .MutableLeaves)

                print(myData)
            } catch let error {
                print(error)
            }
        }

然后以下错误︰

2015-12-30 13:47:06.129 {{忽略}} [10185:2174510] 未知类日志界面生成器文件中的。 域时的错误 = NSCocoaErrorDomain 代码 = 3840"非转义的控制字符字符 961 周围"。 用户信息 = {NSDebugDescription = 非转义的控制字符周围字符 961.}

此错误基本上意味着你有无效 JSON 回来从服务器。

请确保你的 json 是有效运行通过 JSONLint:

http://jsonlint.com

官方微信
官方QQ群
31647020