2015-07-20 3 views
-2

Я работаю над проектом iOS, и я хочу знать, как я могу получить данные из своей базы данных с помощью URL-адреса.переменная пустая с NSDictionnary

Я пробовал много кодов, но ничего не работает.

я, кажется, есть некоторые проблемы с этой частью моего кода:

let jsonData:NSArray = NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers , error: &err) as? NSArray

Если я ставлю NSArray на println это дает мне NSArray, но если мне нужно поставить это NSDictionnary переменная пуста и ничего не появляется.

Как я могу взять значение NSArray и поместить его в UITableViewCell и как это не работает с as? NSDictionnary?

ответ

1

Вы не должны утверждать, что это массив. Значение, возвращаемое NSJSONSerialization.JSONObjectWithData:options:error:, зависит от JSON. Это может быть массив или словарь, в зависимости от того, какой корень вашего документа.

В вашем конкретном случае вы, очевидно, ожидаете словаря, но это не так; это массив.

Я предлагаю вам более внимательно изучить учебник JSON и JSON. Вероятно, вам нужно будет включить намного больше обработки ошибок и интроспекции, чтобы они работали надежно в реальном мире.

0

Попробуйте сделать это:

//replace 
let jsonData:NSArray = NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers , error: &err) as? NSArray 

//with 
let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) 

, а затем распечатать (JSON), чтобы увидеть, какой тип объекта вы получаете назад

Вот код, я использую, чтобы сделать запрос получите:

let url = NSURL(string: urlString) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(url!, completionHandler:{ 
     (data, response, error) in 
     if error != nil { 
      //Handle error, just for testing I do this: 
      print(error!.localizedDescription) 
     } else { 
      let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) 
      print(json) 
      //use data from json, if it's a dictionary, you can loop through and add objects to an array 
     } 
    }) 
    task!.resume() 

Here's ответ о создании запросов

И вот простой метод cellForRowAtIndexPath, который заполняет tableViewCells из массива:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") 
    let text = self.tableContents[indexPath.row] as! String 
//tableContents is just the array from which you're getting what's going in your tableView, and should be declared outside of your methods 
    cell.textLabel?.text = text 
    return cell 
} 

С этим self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") в viewDidLoad

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