将 UITableView 连接到 JSON API

Posted

技术标签:

【中文标题】将 UITableView 连接到 JSON API【英文标题】:Hooking UITableView to a JSON API 【发布时间】:2015-04-14 19:33:00 【问题描述】:

我对 Swift 很陌生,我正试图以最好的方式将它连接到 UITableView。我决定使用 SwiftyJSON,这似乎很简单。我在 JSON 对象中的对象可能如下所示:


    "id": "146",
    "title": "Esports site Streak provides prize-heavy alternative to traditional betting",
    "url": "http://www.dailydot.com/esports/streak-counter-strike-vulcun-betting/",
    "image_url": "//cdn0.dailydot.com/cache/bb/cc/bbccc49d8271f2f3ed4c40b45c0fe0c0.jpg",
    "date": "2015-04-10 22:07:00",
    "news_text": "test teeeext",
    "referer_img": "1"

到目前为止,我已经开始创建一个循环,该循环通过 viewDidLoad 中的所有循环创建循环

for (key: String, subJson: JSON) in jsonArray 

    println(subJson)


然后我为所有新闻创建了一个类,如下所示:

class News 
    var id: Int!
    var title: NSString!
    var link: NSString!
    var imageLink: NSString!
    var summary: NSString!
    var date:NSString!

    init(id: Int, title:NSString, link: NSString, imageLink:NSString, summary: NSString, date:NSString) 
        self.id = id
        self.title = title
        self.link = link
        self.imageLink = imageLink
        self.summary = summary
        self.date = date
    

但是我不确定这是否是创建它的最佳方法?我接下来的步骤是将它连接到 UITableView 吗?

【问题讨论】:

只需为您从 json 创建的 News 对象创建一个数组,然后将该数组用作您的 UITableView 的模型。所以第一个单元格将显示数组的第一个对象,等等。 你能用 sudo 代码或 sn-p 来回答吗? 【参考方案1】:

这应该让您知道该怎么做。您需要先创建一个数组。然后,您将创建一个 News 对象并将其一一添加到该数组中。然后,您将使用该数组作为 tableView 的数据源。在您的 cellForRowAtIndexPath 中,您将读取您的 News 对象并显示它们的数据。

var arrayNews = Array<News>()
self.tableView.dataSource = self

for (key: String, subJson: JSON) in jsonArray 
    // Create an object and parse your JSON one by one to append it to your array
    var newNewsObject = News()
    id:        = //
    title:     = //
    link       = //
    imageLink  = //
    summary    = //
    date       = //
    arrayNews.append(newNewsObject)

self.tableView.reloadData() // This will read in your arrayNews array

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    var cell = tableView.dequeueReusableCellWithIdentifier("NewsCell") as! NewsCell
    let newsObject = self.arrayNews[indexPath.row] // Assuming this is 1 section

    // set all of your details here
    cell.labelBlahBlah.text = something
    return cell

【讨论】:

好的,谢谢!!顺便说一句,我将遍历 2 个 json 文件。一个是最近的新闻,一个是流行的新闻。我需要为此创建不同的新闻类,还是只需要创建 2 个不同的数组并将它们附加到每个数组? 如果他们使用相同的字段,则使用相同的类并创建一个多维数组来存储不同的“部分”。数组>。然后在您的 cellForRowAtIndexPath 中,您将通过该数组破译您的部分。 self.arrayNews[section][row]. 无法将数组 类型的值分配给 uitableviewdatasource 类型的值 我不确定他为什么将dataSource 分配给数组。您的UIViewController 应该是dataSource,因为它将实现UITableViewDataSource 函数的类(即cellForRowAtIndexPath)。还要确保实现numberOfSectionsnumberOfRowsInSection(不记得确切的名称)。您应该将 tableview 的行数设置为数组的 count 属性。 这不是我想要表达的意思,但你是对的。通过委托方法使用数组。委托方法访问该数组。 (不打算将其作为可构建代码)

以上是关于将 UITableView 连接到 JSON API的主要内容,如果未能解决你的问题,请参考以下文章

将 editButtonItem 连接到 UITableView

将 iPhone 连接到 Android 的 Wifi Direct 软 AP

将 UITableView 连接到 Firebase 结果

无法将 UITableViewController 连接到在 xib 中创建的 UITableView

将 UITableView 单元连接到单独的视图控制器 [关闭]

将情节提要的 UITableView 连接到 .m UIViewController 作为 IBOutlet