使用SplitViewController时,通过我的DetailViewController中的IBOutlet连接的图像为零。
我正在使用一个协议在MasterViewController和DetailViewController之间进行通信

protocol EventSelectedDelegate: class {
    func eventSelected(event: Event)
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "eventDetailsSegue" {

        let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController

        let selectedIndex = self.eventTableView!.indexPathForCell(sender as! UITableViewCell)
        let event = self.events[selectedIndex!.row]

        self.delegate = controller
        self.delegate?.eventSelected(event)

        controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
        controller.navigationItem.leftItemsSupplementBackButton = true
    }
}

并在DetailViewController中实现该方法
class DetailViewController: UIViewController, EventSelectedDelegate {

    private var event : Event?
    @IBOutlet weak var eventImage: UIImageView!

    func eventSelected(event: Event) {
        self.event = event
        self.configure()
    }

    func configure() {
        if let event = self.event {
            self.title = event.name

            if let eventImage = self.eventImage {
                eventImage.image = event.image    // <--- Never reached.
            }
        }
    }
}

示例SplitViewController运行良好,其中UILabel通过IBOutlet连接。
我能区分示例代码和我的代码的唯一区别是,我有一个单独的用于UISplitViewController部分的故事板,我正在将其加载到AppDelegate.swift文件中
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    let storyboard = UIStoryboard(name: "MyBundle", bundle: NSBundle(identifier: "com.example.MyBundle"))
    self.window?.rootViewController = storyboard.instantiateInitialViewController()
    self.window?.makeKeyAndVisible()

    return true
}

我用的是XCode 7和Swift 2。有人有什么想法吗?

最佳答案

我能想到的唯一问题是,self.eventImage是nil,它是一个隐式展开的可选项,属性self.eventImage是在初始化story board中的视图控制器时初始化的。
如果您在故事板中有一个不同的视图控制器,请尝试为它创建一个对象,并将其分配给Detail VC并尝试。希望这有帮助。

10-07 19:44
查看更多