【问题标题】:Pulling Information from API and printing it on Main StoryBoard从 API 中提取信息并将其打印在 Main StoryBoard 上
【发布时间】:2021-10-15 02:38:14
【问题描述】:

我在将收集到的信息从 API 推送到我的 Main StoryBoard 时遇到了困难。我有一个处理收集我需要的所有信息的函数,然后我将它存储在一个字符串数组中,在我的视图中确实加载了函数。但是,当我尝试将其添加到表视图函数时,什么也没有出现。有什么建议吗?

更新:我尝试将我的一些语句设为可选,但我似乎无法理解为什么当我更新/重新加载我的 tableView 时,它会将其读取为 nil。下面是我收到的错误图像以及控制台上打印的内容。

Line of code that error appears.

What the console displays

【问题讨论】:

  • 当您进行编辑时,我没有收到通知。将来您需要回复我的评论并标记我。我只是碰巧在正确的时间检查。如果您的 tableView 为 nil,那么您要么没有将 storyboard 中的 tableView 连接到代码中的实例,要么您在没有使用 storyboard 构造函数的情况下创建了 viewController 的副本,并且找不到它。在您的故事板中,您需要打开助手并从故事板中的表格视图中 crtl 拖动到 tableView 属性。如果您在代码中做某事,那么您需要再次编辑并提供更多详细信息

标签: ios swift xcode api


【解决方案1】:

您有一个需要一些时间来执行的异步网络功能。 Tableview 将在文件的初始加载时加载其单元格。

在第一次运行时,当 tableView 加载时,您的数组将为空。获取数据后,您需要告诉 tableView 重新加载。

像这样在你的completionHandler中添加reload调用:

fetchClassData { [weak self] (classes2) in
    for classes in classes2 {
        self?.classesOG.append(classes.course_id)
        print(self.classesOG)
    }
    
    self?.tableview.reloadData()
}

注意:
我还在处理程序的开头添加了[weak self],因为您将希望避免从其内部调用 self 的保留循环

【讨论】:

  • 我已经尝试实现这部分代码。但是,每次我尝试运行它时,它似乎都无法识别关键字 append ,除非我将整个语句设为可选。 (“self.classesOG.append(classes.course_id)”)。当我这样做时,我仍然收到错误“在隐式展开可选值时意外发现 nil”。我可以寻求其他建议或建议吗?
  • @Eyoab58 是的,带有 append 的行也必须是可选的,因为 self 现在被标记为弱,以避免通过让类对自身具有强引用来避免内存泄漏(循环依赖) .我已经更新了上面的代码示例以使用self?. 来解开可选的自我(永远不要使用强制解包)。试试看,看看会发生什么。如果您遇到错误,请更新您的问题以包含错误消息、发生错误的行以及控制台日志打印到控制台的内容
  • 我已经进行了必要的更改并更新了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2020-12-28
  • 2020-12-17
相关资源
最近更新 更多