我正在尝试关注此tutorial并将其添加到我的应用中。但是有一些问题,所以我尝试在Xcode中从头开始重新创建项目。同样的问题不断出现。
首先在TableViewCell类的SidePanelViewController中声明IBOutlets
class AnimalCell: UITabelViewCell {
@IBOutlet weak var animalImageView: UIImageView!
@IBOutlet weak var imageNameLabel: UILabel!
@IBOutlet weak var imageCreatorLabel: UILabel!
func configureForAnimal(animal: Animal) {
animalImageView.image = animal.image
imageNameLabel.text = animal.title
imageCreatorLabel.text = animal.creator
}
}
不要出现在故事板中,所以当我点击AnimalCell时,这些IBOutlets应该可以在我的左视图和右视图控制器中的TableView中连接,但没有任何显示。唯一可以工作或允许我在StoryBoard中创建连接的IBOutlets是对象是实际的视图控制器。
我尝试使用助手编辑器控件拖动UI元素并连接它们无论如何最终圆圈中的点显示其连接,即使它仍然在我的Storyboard Outlets连接列表中显示为空白(但是如果我关闭并重新打开xcode我必须再次这样做)。如果我将它与最终项目和从网站下载的初学者项目进行比较,这是不正确的。在网站的入门项目中,IBActions和IBOutlets已预先连接,因此它们在故事板中显示得很好,如果我尝试从头开始这样做,我无法理解,为什么它们不会在我的Outlet连接中显示在Xcode中清单? (即使我将SidePanelViewController中的代码从下载的版本直接剪切并粘贴到我的网站仍然无法正常工作)。
其次当我在模拟器上实际运行项目时,它会在My App Delegate文件和我的SidePanelViewController中抛出2个错误,它似乎突出显示
let cell = tableView.dequeueReusableCellWithIdentifier(TableView.CellIdentifiers.AnimalCell, forIndexPath: indexPath) as AnimalCell
完整的功能是
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
tableView.dequeueReusableCellWithIdentifier(TableView.CellIdentifiers.AnimalCell, forIndexPath: indexPath) as AnimalCell
cell.configureForAnimal(animals[indexPath.row])
return cell
}
并且在App Delegate中我得到相同的线程1:Exc_BreakPoint(代码= Exc_I386_BPT,子代码= 0x0),这就行了
class AppDelegate: UIResponder, UIApplicationDelegate {
我认为错误也可能在
中SidePanelViewController @objc
protocol SidePanelViewControllerDelegate {
func animalSelected(animal: Animal)
}
从网站下载的最终版本在模拟器中运行完全正常,没有错误。但它的所有相同的代码,所以我很困惑为什么我重新创建的版本不起作用。此外,当我使用下载的启动项目完成代码时左侧面板滑动,但小狗按钮也作为左按钮,因此它不向右滑动,但是在模拟器中运行时没有出现错误一个我从头开始重建。
我删除了派生数据中的内容,删除了Xcode,安装为新鲜甚至还原为6.1,因为6.1.1源码包比6.1更频繁地崩溃。
我很困惑,为什么我这样做时教程中列出的原始代码不起作用,但下载的最终版本有效。我无法弄清楚我做错了什么。我是Xcode和Swift的新手。有人可以帮忙吗?
答案 0 :(得分:1)
您可能忘记将AnimalCell
设置为故事板中单元格的类。
您需要选择单元格并在Utilities侧栏中,转到Identity Inspector并使用AnimalCell填写Class字段。
Command + Option + 3将直接带您进入正确的屏幕。