viewDidLoad() 中的 tableView 数据源为空 - Swift

2024-04-09

下面是我的 ViewController 代码。 GetRequest 中的 println 打印从 HTTP GET 请求接收到的正确数据。此时tableData有10个键值对。但是,如果我在 viewDidLoad() 中调用 GetRequest() 之后放置一个断点,则 tableData 为空,并且 tableView 中不会显示任何内容。为什么是这样?我哪里错了?

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
    @IBOutlet var tableView: UITableView!
    var tableData: [String:String] = [:]
    let textCellIdentifier = "TextCell"

func GetRequest(urlPath: String)
{
    var LatestWaitTimes: [String:String] = [:]
    let url: NSURL = NSURL(string: urlPath)!
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in

        if error != nil {
            // If there is an error in the web request, print it to the console
            println(error.localizedDescription)
        }

        var err: NSError?
        var jsonResult: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err)
        if err != nil {
            // If there is an error parsing JSON, print it to the console
            println("JSON Error \(err!.localizedDescription)")
        }

        let json = JSON(jsonResult!)
        let count: Int? = json.array?.count

        if let ct = count {
            for index in 0...ct-1 {
                let name = json[index]["CrossingName"].string
                var wait = json[index]["WaitTime"].stringValue
                if (wait == "-1")
                {
                    wait = "No Info"
                }
                else
                {
                    wait += " min"
                }
                println(name!+": "+wait)
                LatestWaitTimes[json[index]["CrossingName"].stringValue] = wait as String?
            }
        }
        self.tableData = LatestWaitTimes
    })
    task.resume()
}

override func viewDidLoad() {
    super.viewDidLoad()
    var apiInfo = GetWaitTimes()
    GetRequest(apiInfo.BorderCrossingApi+"?AccessCode="+apiInfo.AccessCode)
    self.tableView.delegate = self
    self.tableView.dataSource = self
    tableView.reloadData()
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1;
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier(self.textCellIdentifier) as! UITableViewCell
    let thisEntry = self.tableData.values.array[indexPath.row]
    cell.textLabel?.text = thisEntry+": "+tableData[thisEntry]!
    return cell
}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}

问题是GetRequest异步运行。所以你必须reloadData在 - 的里面completionHandler of dataTaskWithURL:

let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in

    // do all of your existing stuff here

    dispatch_async(dispatch_get_main_queue()) {
        self.tableData = LatestWaitTimes
        self.tableView.reloadData()
    }
})
task.resume()

您可以删除reloadData从内部viewDidLoad.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

viewDidLoad() 中的 tableView 数据源为空 - Swift 的相关文章

  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • NSString – 静态还是内联?有性能提升吗?

    如果我写的话会有任何性能提升吗 NSString helloStringWithName NSString name static NSString formatString Hello return NSString stringWith
  • 确定 SceneKit 中 SKVideoNode 的视频大小/长宽比

    如何从 AVPlayer 获取视频的视频大小来设置节点的几何大小 例如 我有一个具有宽度和高度的 SCNPlane let planeGeo SCNPlane width 5 height 5 所以现在我实例化我的视频播放器 let vid
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • Parse.com 从相关 PFObject 获取 PFUser

    我正在将照片保存为 PFObject 解析 并使用 PFUser currentUser 用户 ID 作为其键之一 我想在表格视图中显示照片以及该 PFUser 的详细信息 但是当我尝试获取用户时 PFUser user self phot
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 导入 RNCryptor 后架构 armv7 的未定义符号

    我导入了 RNCryptor 可以在这里找到 https github com rnapier RNCryptor https github com rnapier RNCryptor进入我的应用程序 但是 我在日志中收到了三个错误 Und
  • 从“NSPercientStoreResult”转换为不相关类型“Entity”总是失败

    我正在创建一个小应用程序来学习 CoreData 中的多对多关系 但是 使用下面的代码 从 NSFetchResult 到实体类 Groepering 的转换出现错误 与我的项目相比 我在互联网上找到的示例没有看到任何差异 为什么转换仍然失
  • 当我输入字符时,SwiftUI 中的 TextField 失去焦点

    当我在文本字段中输入字符时遇到问题 在练习集视图 我必须重新单击文本框才能输入另一个字符 如果我从文本字段中删除绑定 我可以流畅地输入文本 我认为这与我的演讲者班级和更新集函数重新创建一个集合实例 因为我必须替换数组中两层深处的一些值 Co
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

    我正在尝试禁用一些密码 弱 例如单个 DES 单个 DES 40 位等 我尝试过使用这段代码在 Cocoa 中使用 CFSocket CFStream 时如何设置 SSL 密码 https stackoverflow com questio
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • Swift:使具有相同“形状”的两种类型符合通用协议

    我有两种不同的类型 它们代表相同的数据 并且具有完全相同的 形状 这两种不同的类型是代码生成的 我被迫处理它们 但是 我想让它们符合一个通用的协议 这样我就可以对这两种类型一视同仁 这是一个例子 假设这是我所坚持的两种代码生成类型 stru
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个

随机推荐

  • Blender 与 Unity [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • windows 8 App从App.xaml.cs访问页面方法

    可能是一个愚蠢的问题 所以我提前道歉 我是构建 Windows 8 应用商店应用程序的新手 当应用程序暂停时 我需要在页面脚本上运行一些方法 我只有一个页面 并且 Page1 xaml cs 文件中有一些公共方法 我想从 App xaml
  • 开发网站时如何处理不同的屏幕分辨率/屏幕尺寸?

    我想使用 jQuery 开发一个适用于所有主流浏览器的网站 我想从基本布局开始 一个页眉 几个包含内容的选项卡和页脚 我想知道应该如何创建这个布局来支持不同的屏幕分辨率 屏幕尺寸或窗口尺寸 在定义组件的宽度和高度时 我应该使用像素 点 百分
  • 如何按组仅保留特定列中具有最低和最高值的行?

    简而言之 我该怎么办 structure list id c 1 2 3 4 5 6 user c 1 1 1 2 2 2 value c 1 3 5 2 5 9 Names c id user value row names c NA 6
  • 如何让 Rosenbrock23 在 ParameterizedFunctions.jl DSL 中使用 ODE?

    进一步这个问题 https stackoverflow com questions 54422068 how to fix typeerror in setindex in differentialequations jl 54423008
  • 从 CodeAttribute 内的参数获取 CodeClass?

    我正在研究一些 T4 代码生成 为此我需要在 BarAttribute 构造函数内传递的类型的 CodeClass class Baz class Bar Attribute public Bar Type type Bar typeof
  • Python pandas 检查数据框是否不为空

    我有一个if语句 它检查数据框是否不为空 我的做法如下 if dataframe empty pass else do something 但我确实需要 if dataframe is not empty do something 我的问题
  • 创建“集合字典”

    我需要将数据有效地存储在类似于 集合字典 的东西中 例如有一个字典 其中包含与每个唯一键匹配的多个 唯一 值 我的数据源是一个 不是很好 结构化的 XML 我的想法是 我将浏览许多元素并找到关键 如果key不存在 则将其添加到字典中 如果已
  • 如何在宏 gcc 中添加警告禁用编译指示

    我需要禁用以下代码中宏 LOG W 内部产生的警告 为此 我将此宏包装在另一个宏 LOG W 中 并禁用了其中的警告 Wold style cast 然后在代码中我使用 LOG W 代替 但是我仍然收到警告并且无法找出原因 任何指示表示赞赏
  • Netty 和字节顺序

    由于文档不完善并且缺乏 Netty 经验 我遇到了一些问题 我不知道如何设置默认的 ByteOrder 我需要一个小尾数法默认设置 如果有人能给我一些关于这方面的提示 我会很高兴 你可以使用Bootstrap setOption 去做这个
  • 为什么使用 Schema.org 微数据来标记网页元素?

    我明白为什么以及如何使用Schema org http schema org 将微数据添加到您的网站 这不是一个问题 问题是为什么 Schema org 支持某些可以用简单 HTML5 标记的内容 其中包括 Types WebPage ht
  • 使用 JavaScript 变量作为函数名?

    我在 Javascript 中有以下代码 jQuery document ready function var actions new Object var actions actions 0 create actions 1 update
  • 如何打开嵌入的资源word文档?

    我的项目中有一个嵌入的 Word 模板文档 我将其添加为资源 Resources resx gt 添加资源 gt 添加现有文件 现在我想打开它 如下所示 Microsoft Office Interop Word Application a
  • 如何使用 JavaScript 源地图(.map 文件)?

    最近我看到文件带有 js map一些 JavaScript 库附带的扩展 例如Angular http code angularjs org 这在我脑海中提出了几个问题 它是做什么用的 为什么 Angular 的人要关心交付一个 js ma
  • 尝试执行 axis2 服务客户端时出现异常

    我正在尝试创建一个示例 axis2 ServiceClient 它抛出以下错误 org apache axiom om OMException No meta factory found for feature default this u
  • 使用故事板时从 UITabbarController 添加/删除或显示/隐藏选项卡栏项目

    我有一个应用程序需要显示不同的内容UITabBarController基于用户是否注册 有没有办法添加和删除ViewControllers 来自 aUITabBarController在运行时 显示和隐藏也很好 在故事板之前你可以打电话se
  • sudo bang bang 到底是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 sudo bang bang 的目的是什么 sudo 什么时候可能需要使用它 砰砰砰 命令是一个快捷方式重复您在终端中输入的上一个命令 当您忘记需要管
  • 无法直接从浏览器访问 Angular 组件

    我有一个使用 Angular 1 5 组件的小型 Web 应用程序 当我启动服务器时 浏览器将我重定向到http 127 0 0 1 50001 欢迎 http 127 0 0 1 50001 welcome 这是预期的 并且欢迎页面出现
  • Python断言风格

    我想知道我所做的是否是一种适当的断言方法 我正在尝试为 Python 的风格指南制作一些既简洁又非常正确的东西 try assert self port number 0 assert self handle None assert isi
  • viewDidLoad() 中的 tableView 数据源为空 - Swift

    下面是我的 ViewController 代码 GetRequest 中的 println 打印从 HTTP GET 请求接收到的正确数据 此时tableData有10个键值对 但是 如果我在 viewDidLoad 中调用 GetRequ