【发布时间】:2014-11-14 05:02:25
【问题描述】:
我创建了一个TableViewController 来过滤来自CoreData 数据库的结果,当我尝试使用以下IBAction 实现过滤器时遇到此错误。我已经挖掘了代码检查拼写错误,但我没有发现任何错误。非常感谢任何帮助解决这个问题,因为我对编程很陌生:
fatal error: unexpectedly found nil while unwrapping an Optional value
@IBAction func saveButtonTapped(sender: UIBarButtonItem) {
println("saveButtonTapped")
delegate!.filterViewController(self,
didSelectPredicate: selectedPredicate,
sortDescriptor: selectedSortDescriptor)
dismissViewControllerAnimated(true, completion:nil)
}
这是 TVC 类的代码:
import UIKit
import CoreData
protocol FilterViewControllerDelegate: class {
func filterViewController(filter: RollerFilterViewController,
didSelectPredicate predicate:NSPredicate?,
sortDescriptor:NSSortDescriptor?)
}
class RollerFilterViewController: UITableViewController {
// outlet connected to cell on storyboard
@IBOutlet weak var shoulderCell: UITableViewCell!
// Variables for filter
weak var delegate: FilterViewControllerDelegate?
var selectedSortDescriptor: NSSortDescriptor?
var selectedPredicate: NSPredicate?
var coreDataStack: CoreDataStack!
lazy var shoulderPredicate: NSPredicate = {
var predicate = NSPredicate(format: "stretch.muscleGroup contains[cd] %@", "shoulder")
return predicate!
}()
// MARK - UITableViewDelegateMethods
override func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)!
switch cell {
// cases for muscle groups
case shoulderPredicate:
selectedPredicate = shoulderPredicate
default:
println("default case")
}
if cell.accessoryType == .Checkmark {
cell.accessoryType = .None
println("removed checkmark")
} else {
cell.accessoryType = .Checkmark
println("set to checkmark")
}
}
// MARK - UIButton target action
@IBAction func saveButtonTapped(sender: UIBarButtonItem) {
println("saveButtonTapped")
delegate!.filterViewController(self,
didSelectPredicate: selectedPredicate,
sortDescriptor: selectedSortDescriptor)
dismissViewControllerAnimated(true, completion:nil)
}
}
【问题讨论】:
-
你设置过代理吗?
-
"unexpectedly found nil" 相信错误。有些东西是零。使用调试器找出什么。正如@rdelmar 建议的那样,很可能是
delegate。
标签: ios uitableview core-data swift