使用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并尝试。希望这有帮助。