私のテーブルビューで使用するJSONファイルからデータをロードしようとしています。それにもかかわらず、viewdidloadでこの関数を呼び出すと、データを含む配列にデータが含まれず、空の配列が返されます。関数は空ではなく空の配列を返します。
class CompanyModel {
func getJSON() -> NSMutableArray() {
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) { <- does not enter bracket?
(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()
return companyArray
}
}
私がデバッグセッションを実行すると、上記のブラケットには入りません。代わりに、関数を返すようにまっすぐジャンプし、空の配列を返します。私はJSONファイルからデータを取得することはできないと信じていますが、それほど理由はわかりません。
があなたのJSONを印刷してみてください役立ちます
希望は、あなたは、有効なデータを得るのですか?ただ確実にする。 また、Jsonデータを共有することができれば、答えが簡単かもしれません。 「企業」はjsonの直接の鍵ではないかもしれないので、jsonの鍵の鍵となるかもしれない。 –
jsonデータを印刷し、有効なjsonをチェックするかどうか –