我是Swift的新手,还在搞清楚Swift / Objective-C语法和库。我正在尝试重新创建一个简单的图片列表,我可以在不同的图像视图上查看。下面是代码和错误消息,有人可以指导我正确的方向。
导入UIKit
class MasterViewController: UITableViewController {
var detailViewController: DetailViewController? = nil
var objects = [AnyObject]()
override func awakeFromNib() {
super.awakeFromNib()
if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
self.clearsSelectionOnViewWillAppear = false
self.preferredContentSize = CGSize(width: 320.0, height: 600.0)
}
}
override func viewDidLoad() {
super.viewDidLoad()
let fm = NSFileManager.defaultManager()
let path = NSBundle.mainBundle().resourcePath!
let items = fm.contentsOfDirectoryAtPath(path, error: nil)
for item in items as! [String] {
if item.hasPrefix("IMG_") {
objects.append(item)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Segues
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let detailViewController = segue.destinationViewController as! DetailViewController
detailViewController.detailItem = objects[indexPath.row] as? String
}
}
}
// MARK: - Table View
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objects.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
let object: (AnyObject) = objects[indexPath.row]
cell.textLabel!.text = object as? String
return cell
}
}
我特意在这段代码中收到错误:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let detailViewController = segue.destinationViewController as! DetailViewController
detailViewController.detailItem = objects[indexPath.row] as? String
}
}
}
控制台中的错误消息显示为:
无法将'UINavigationController'类型的值(0x10a979698)转换为'Project1.DetailViewController'(0x1090f27a0)。
答案 0 :(得分:1)
替换它:
let detailViewController = segue.destinationViewController as! DetailViewController
有了这个:
let nav = segue.destinationViewController as UINavigationController
let detailViewController = nav.topViewController as! DetailViewController
解决方案修改自:DestinationViewController Segue and UINavigationController swift
答案 1 :(得分:0)
是什么让您认为发件人是目标视图控制器?不是。
你想要的是:
if let detailViewController = segue.destinationViewController as? DetailViewController {
但是@nhgrif有一个观点:你对导航控制器很感兴趣。