- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 swift 开发我的第一个 iOS 应用程序。我正在尝试将 a 值从一个 viewController 加载到另一个 viewController 中。我正在使用一个协议(protocol),但我无法让它正确执行。我已经在堆栈溢出和其他地方进行了搜索,但未能找到适合我情况的答案。
这是我试图从中提取值(value)的 VC:
protocol AddHelperVCDelegate {
func didFinishAddingHelper(controller: AddHelperViewController)
}
class AddHelperViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate {
@IBOutlet weak var tableView: UITableView!
let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
var fetchedResultsController:NSFetchedResultsController = NSFetchedResultsController()
var delegate:AddHelperVCDelegate! = nil
var helperBonus:NSNumber = 0
override func viewDidLoad() {
super.viewDidLoad()
fetchedResultsController = getFetchResultsController()
fetchedResultsController.delegate = self
fetchedResultsController.performFetch(nil)
// Do any additional setup after loading the view.
}
}
这里是我尝试将值(和 View )移回正在进行的 VC 的地方。
// UITableViewDelegate
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var indexPathForRow = tableView.indexPathForSelectedRow()
println("indexPath for selected row is: \(indexPathForRow)")
let thisUser = fetchedResultsController.objectAtIndexPath(indexPath) as UserModel
var cell:UserCell = tableView.dequeueReusableCellWithIdentifier("helperCell") as UserCell
helperBonus = thisUser.effectiveCombat
helperBonus = Int(helperBonus)
println("helperBonus is: \(helperBonus)")
delegate.didFinishAddingHelper(self)
}
如果我将委托(delegate)设为可选 (delegate?.didFinishAddingHelper(self)
),则什么也不会发生。如果我不这样做,我会崩溃并显示错误消息:
indexPath for selected row is: Optional(<NSIndexPath: 0xc000000000018016> {length = 2, path = 0 - 3})
helperBonus is: 0
fatal error: unexpectedly found nil while unwrapping an Optional value
现在,我知道我将 delegate 声明为 nil,但这是我对正在发生的事情的理解的限制。我需要在此函数中的后续 VC 中添加值:
func didFinishAddingHelper(controller: AddHelperViewController) {
self.effectiveCombat = Int(controller.helperBonus)
controller.navigationController?.popViewControllerAnimated(true)
}
最佳答案
发生崩溃是因为 AddHelperViewController
的 delegate
属性为 nil
。这是因为您没有设置它。
无论您在何处创建 AddHelperViewController
,都请在下一行设置其委托(delegate):
let addHelperVC = AddHelperViewController()
addHelperVC.delegate = self
然后当您调用 delegate
属性时,它会指向创建它的 View Controller 。
如果您的 AddHelperViewController
是使用 Storyboard创建的,请在 prepareForSegue(_:sender:)
中设置 delegate
显示新 Controller :
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let vc = segue.destinationViewController as? AddHelperViewController {
// If we got here, vc is an AddHelperViewController
vc.delegate = self
}
}
关于ios - Swift 委托(delegate)和可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889416/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!