2015-04-07 3 views
0

У меня возникли трудности с заполнением таблицы из результата json. Мой код выглядит следующим образом (извинений, но это, кажется, не хотят, хотят поставить первые две строки, как код: /):JSON to TableView трудность

импорт UIKit

класс ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let url = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams") 
    let data = NSData(contentsOfURL: url!) 
    let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary 

    let teamsArray = json["teams"] as NSArray 

    print("Team List : \(teamsArray)") 

    for dic in teamsArray 
    { 
     let teamname = dic["name"] as NSString 

     let code = dic["code"] as NSString 

     println("Team Name, \(teamname) : Code, \(code)") 
    } 

    //  self.tableViewObject.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
} 

@IBOutlet weak var tableViewObject: UITableView! 




func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return teamsArray.count 
} 



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell") 
    cell.textLabel!.text = teamsArray[indexPath.row] 


    return cell 
} 

}

Он жалуется дважды о «Использование неразрешенного идентификатора 'teamsArray' дважды первый в:.

Возвращение teamsArray.count

, а затем по адресу:

cell.textLabel .text = teamsArray [indexPath.row]

Может кто-то помочь мне связать мой JSON с моей Tableview пожалуйста, помогая мне разрешить! ошибка, упомянутая выше, или вводя меня в правильном направлении.

Стоит отметить, когда я использую код на пустой взгляд без какого-либо намека на Tableview я получаю отличные результаты в консоли:

let url = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams") 
    let data = NSData(contentsOfURL: url!) 
    let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary 

    let teamsArray = json["teams"] as NSArray 

    print("Team List : \(teamsArray)") 

    for dic in teamsArray 
    { 
     let teamname = dic["name"] as NSString 

     let code = dic["code"] as NSString 

     println("Team Name, \(teamname) : Code, \(code)") 
    } 

Я новичок в StackOverflow и сказали, что мой вопрос ранее был недостаточно конкретным. Пожалуйста, дайте мне знать, если это еще слишком расплывчато, и я постараюсь улучшить его.

Большое спасибо, Алан.

+0

Вы должны узнать о 'scope'. Вы объявляете 'командыArray' в' viewDidLoad', но используете его другими способами. Объявив его внутри 'viewDidLoad', вы сообщаете своему коду, что он вам нужен только внутри' viewDidLoad'. Поэтому, когда вы пытаетесь ссылаться на него другими способами, он об этом не знает. Подумайте об этом так: если вы прячете в своем доме, может кто-нибудь с улицы увидеть вас? Это то, что происходит прямо сейчас. Вам нужно объявить его на один уровень выше, чтобы он работал. – LyricalPanda

+0

Я думал, что это будет так, но когда у меня будет один уровень выше, сам код просто не будет запущен вообще:/ –

+0

Как вы его используете? Попробуйте воспользоваться следующим классом ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {var commandsArray: NSArray {переопределить func viewDidLoad() .... '. Затем внутри 'viewDidLoad', do' self.teamsArray = json ["teams"] '. Я не пишу быстро, так что это может быть не совсем точно на 100% правильно, но должно быть по правильной линии. – LyricalPanda

ответ

1

ли, как это ...

import UIKit 

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 

@IBOutlet weak var tableViewObject: UITableView! 
var teamsArray = NSArray() 
override func viewDidLoad() 
{ 
super.viewDidLoad() 

self.tableViewObject.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 

let url = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams") 
let data = NSData(contentsOfURL: url!) 
let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary 

teamsArray = json["teams"] as NSArray 

print("Team List : \(teamsArray)") 

self.tableViewObject.reloadData() 

for dic in teamsArray 
{ 
    let teamname = dic["name"] as NSString 

    let code = dic["code"] as NSString 

    println("Team Name, \(teamname) : Code, \(code)") 
} 


} 




func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
return teamsArray.count 
} 



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 

let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell") 
cell.textLabel!.text = self.teamsArray.objectAtIndex(indexPath.row).objectForKey("name") as? NSString 


return cell 
} 
+0

Здравствуйте, большое спасибо за код. Я скопировал его, и у меня получится успешная сборка, но это ошибки при ее запуске. Я добавлю изображение ошибки к вопросу, чтобы узнать, помогает ли он. Возможно, я неправильно настроил свой контроллер просмотра? Если вы можете предложить ему молнию, которая была бы идеальной, но я ценю, что это нахально для меня. Большое спасибо, Алан. –

+0

Извинения, но я не могу загрузить изображение, пока у меня не будет 10 очков репутации. Сожалею. –

+0

Какая ошибка у вас есть? Потому что я реализовал такой же код в своем xcode и отлично работает. – Bhoomi