从AppDelegate

时间:2017-06-20 08:39:30

标签: ios swift

我试图从AppDelegate向UIViewController注入一个对象,但我不确定我是否正确地执行了此操作。请有人建议。当我在标记为“错误发生在这里”的代码行启动我的应用程序时出现错误。

enter image description here

 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) 

1 个答案:

答案 0 :(得分:1)

您在AppDelegate中实例化视图控制器,但系统将创建该视图控制器类的另一个实例,因此显示没有初始化itemstore属性的类的实例。 您必须使itemstore成为类型变量而不是实例变量,或者如果您只需要为根视图控制器使用此功能,则必须为根视图控制器实例实例化itemstore变量,你知道你的导航控制器会使用它。