我试图从AppDelegate向UIViewController注入一个对象,但我不确定我是否正确地执行了此操作。请有人建议。当我在标记为“错误发生在这里”的代码行启动我的应用程序时出现错误。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Create ItemStore instance
let itemStoreObject = ItemStore()
let storyBoard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let testController = storyBoard.instantiateViewController(withIdentifier: "testTableController") as! TestTableViewController
testController.itemstore = itemStoreObject
return true
}
ItemStore:
import UIKit
class ItemStore {
var allItems = ["Thanh", "David", "Tommy", "Maria"]
}
TestTableViewController:
class TestTableViewController: UIViewController, UITableViewDelegate, UISearchBarDelegate, UITableViewDataSource{
@IBOutlet var myTableView: UITableView!
var itemstore: ItemStore!
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("numberOfRowsSection ...")
return itemstore.allItems.count // THE ERROR OCCURS HERE.
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print("cellForRow ...")
// Get a new or recycled cell
let cell = UITableViewCell(style: .value1, reuseIdentifier: "UITableViewCell")
let name = itemstore.allItems[indexPath.row]
cell.textLabel?.text = name
return cell
}
}
我收到以下错误消息(标记在行'错误发生在这里'):
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
答案 0 :(得分:1)
您在AppDelegate
中实例化视图控制器,但系统将创建该视图控制器类的另一个实例,因此显示没有初始化itemstore属性的类的实例。
您必须使itemstore
成为类型变量而不是实例变量,或者如果您只需要为根视图控制器使用此功能,则必须为根视图控制器实例实例化itemstore
变量,你知道你的导航控制器会使用它。