如何使用json

时间:2016-05-25 18:33:00

标签: ios swift nsmutablearray

所以我从一个json格式的url中获取数据。我正在尝试在我的tableview中显示数据,但即使感觉很简单,我也无法弄清楚如何做到这一点。

class CompanyModel {

func getJSON() {

    let companyArray: NSMutableArray = NSMutableArray()

    let requestURL: NSURL = NSURL(string: "http://localhost/Companies/JSON.php")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in

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

        if (statusCode == 200) {
            print("Everyone is fine, file downloaded successfully.")

            do{

                let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)



                if let companies = json["companies"] as? [[String: AnyObject]] {

                    for company in companies {

                        if let name = company["name"] as? String,
                            let phoneNumber = company["phone_number"] as? String,
                            let website = company["website"] as? String,
                            let email = company["email"] as? String,
                            let address = company["address"] as? String

                        {
                        let company = CompanyModel()

                            company.name = name
                            company.phoneNumber = phoneNumber
                            company.website = website
                            company.email = email
                            company.address = address
                        }
                        companyArray.addObject(company)
                        print(companyArray)
                    }
                }
            } catch {
                print("Error with Json: \(error)")
            }

        }
        print(companyArray) <- array is populated
    }
    print(companyArray) <- array is empty
    task.resume()
}
}

我知道我之前已经完成了....我在viewDidLoad()猜测我会调用CompanyModel().getJSON()来获取数据,然后将它存储在一个空数组中但是我的想法如何做到这一点感到空白。

我不能声明NSarray的变量并直接为它存储变量的数据然后填充tableview。不过,我希望这能解释我正在努力实现的目标。

2 个答案:

答案 0 :(得分:0)

首先更改函数以返回公司数组:

for company in companies {

 }

在for循环结束时返回公司数组

dispatch_async(dispatch_get_main_queue(), { 

    return companyArray

})

填充数组后,返回此块中的数组:

task.resume()

return companyArray 返回数组之后:

Let companyModal = CompanyModel()

从任何地方你都想打电话给这个班级并获得阵列:

获取班级的参考资料

viewDidLoad

NSMutableArray中,您可以在任何地方查看表格视图和课程,您应首先var arraySource = NSMutableArray()

viewDidLoad

arraySource = companyModal.getJSON()

Mytableview.reloadData()

并在tableView中显示数据:

{{1}}

答案 1 :(得分:0)

您不能在异步网络请求的关闭中使用std::initializer_list,而是必须使用回调。

您需要来自请求的NSMutableArray,所以首先,让我们回复一下:

 <%= select_tag "leave_emp_year", options_for_select(2015..Date.today.year, Date.today.year), prompt: "Select Year", class: "leave_emp_sort_filter",style: "width:150px !important;" %>

我们将此回调添加到方法签名:

return

然后在数组可用的位置,我们放置此完成处理程序:

completion: (array: NSMutableArray)->()

现在要从网络中获取数组,我们使用这样的尾随闭包:

func getJSON(completion: (array: NSMutableArray)->())