我想传递一个NSManagedObjectContext
从一个视图控制器到下一个在我prepareForSegue
方法,但我不能访问在destinationViewController
我已经为它创建的属性:为什么我无法访问符合协议的此DestinationViewController属性?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier {
switch identifier {
case "segueToSettings", "pickLiftSegue":
if let nav = segue.destinationViewController as? UINavigationController {
let vc = nav.topViewController as! Dismissable
vc.dismissalDelegate = self
let context = viewModel.model.context
vc.moc = context // <-- Value of type Dismissable has no member `moc`
}
case "segueToLog":
let destinationVC = segue.destinationViewController as? Dismissable
destinationVC?.dismissalDelegate = self
default:
break
}
}
}
而这里的相关在destinationViewController
的一部分:
class SettingsViewController: UITableViewController, Dismissable, DismissalDelegateProtocol {
@IBOutlet weak var forumlasTitle: UILabel!
@IBOutlet weak var liftsTitle: UILabel!
@IBOutlet weak var weightUnitControl: UISegmentedControl!
@IBOutlet weak var roundNumbersSwitch: UISwitch!
@IBOutlet weak var currentFormulaSelection: UITableViewCell!
@IBOutlet weak var currentLiftsSelection: UITableViewCell!
var dismissalDelegate: DismissalDelegateProtocol?
var moc: NSManagedObjectContext? = nil // <-- There it is right there
}
,我让你在上面看到的vc.moc
误差在prepareForSegue
这显然是说,符合Dismassable协议视图控制器不具有财产卡莱d moc
这是真的:
protocol Dismissable: class {
weak var dismissalDelegate: DismissalDelegateProtocol? { get set }
}
,但我不应该能够访问视图控制器本身的属性没有使它的协议的一部分?
我搜索了很长一段时间,并通过Apple's Protocol documentation梳理,但我还没有找到答案。我认为我对协议有很好的处理,但似乎我仍然缺少一个或两个关键概念。
在你的协议中你有'dismissalDelegate',但你正在设置'moc',它是你视图控制器的一部分。可能你需要将视图控制器转换为'SettingsViewController'而不是'Dismissible' – GoodSp33d