gpt4 book ai didi

ios - 在 UITabBarController 中显示 UITableView 数据的正确模式是什么?

转载 作者:行者123 更新时间:2023-11-29 11:57:48 30 4
gpt4 key购买 nike

我试图在 UITabBarController 内的 UITableView 中显示一些(目前是硬编码的)数据,但我在填充行时遇到了困难。

这是我的数据对象 (Reservation.swift) 的代码

import UIKit

class Reservation: NSObject {
var tailNumber: String
var aircraftType: String
var arrivalTime: String
var eta: String

init(tailNumber: String, aircraftType: String, arrivalTime: String, eta: String) {
self.tailNumber = tailNumber
self.aircraftType = aircraftType
self.arrivalTime = arrivalTime
self.eta = eta

super.init()
}
}

这是我的预订商店 (ReservationStore.swift) 的代码

import UIKit

class ReservationStore {
// Store all our schedules
var allReservations = [Reservation]()

func createReservation() -> Reservation {
let newReservation = Reservation(tailNumber: "N53440", aircraftType: "C172S", arrivalTime: "07-06-2016 07:00am", eta: "1:58")

allReservations.append(newReservation)

return newReservation
}

init() {
createReservation()
}
}

这是我的 UITableView View Controller (ScheduleViewController.swift)

import UIKit

class ScheduleViewController: UITableViewController {
var reservationStore: ReservationStore!

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell", forIndexPath: indexPath)
let item = reservationStore.allReservations[indexPath.row]

cell.textLabel?.text = item.tailNumber

return cell
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let reservationStore = ReservationStore()

let tabController = segue.destinationViewController as! UITabBarController
let reservationController = tabController.viewControllers![1] as! ScheduleViewController

reservationController.reservationStore = reservationStore
}
}

我收到一个 fatal error :在返回 reservationStore.allReservations.count 时解包可选值时意外发现 nil

我相信 prepareForSegue 是在用户单击 UITabController 项目以获取日程表并且就在 View 加载之前调用的。这应该会触发我的 ReservationStore 中的 init() 并在数组中创建一个元素,但我认为这不会发生,因为在计算数组时它为零?

也许这个创作应该在 prepareForSegue 中?搞砸了一天左右,不确定下一步该去哪里,有人能给我指明正确的方向吗?

最佳答案

prepareForSegue() 在 View 加载之前不会被调用。当那个 View Controller 准备切换到一个 View Controller 时调用它。没有分配给您的 ScheduleViewControllerreservationStore 属性,所以它是 nil,因此崩溃。

如果您只想将 ReservationStore 实例分配给该属性,您可以在定义属性时将其设置为默认值:

class ScheduleViewController: UITableViewController {
var reservationStore = ReservationStore()

// …
}

关于ios - 在 UITabBarController 中显示 UITableView 数据的正确模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38312501/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com