我目前正在一个项目中,该项目具有一个由称为CreateNewAccount的视图控制器表示的“创建帐户”页面以及一个与之同名的类。此视图控制器中输入了四个值:1)firstName,2)lastName,3)用户名和4)密码。该视图控制器还具有一个“创建帐户”按钮,当按下该按钮时,应将在4个输入中输入的字符串值传输到名为UInfoRetrieveModel的新类,该类将在MVC配置下归类为Model。不幸的是,该价值转移部分无法正常工作。
然后我让UInfoRetrieveModel将这4个值直接传递给另一个名为UserInfo的模型,然后将这些值中的任何一个委派给UI端可能需要显示它们的其他视图控制器。我已经弄清楚了如何将值从UInfoRetrieveModel传递给UserInfo以及从UserInfo(这是一个模型)传递给所说的视图控制器,但是我还没有弄清楚如何从视图控制器(特别是CreateNewAccount)传递给模型,在这种情况下是UInfoRetrieveModel。
基本上,我在这里的想法是拥有两个模型类:一个模型接收(UInfoRetrieveModel),另一个模型委托(UserInfo)CreateNewAccount中设置的数据值,以使跨UI的数据传输更加有效。
下面是我的CreateNewAccount和UInfoRetrieveModel代码,其中转移似乎无效:
UInfoRetrieveModel->
import Foundation
protocol UInfoRetrieveModelDelegate: class {
func credentialTransfer(data:String)
}
class UInfoRetrieveModel: NSObject {
weak var delegate: UInfoRetrieveModelDelegate?
var firstName: String = ""
var lastName: String = ""
var userName: String = ""
var password: String = ""
func retrieving(){
delegate?.credentialTransfer(data: firstName)
delegate?.credentialTransfer(data: lastName)
delegate?.credentialTransfer(data: userName)
delegate?.credentialTransfer(data: password)
}
}
CreateNewAccount->
import UIKit
class CreateNewAccount: UIViewController{
@IBOutlet weak var FNInput: UITextField!
@IBOutlet weak var LNInput: UITextField!
@IBOutlet weak var usernameInput: UITextField!
@IBOutlet weak var passwordInput: UITextField!
var uInfoRetrieve = UInfoRetrieveModel()
@IBAction func thanksForJoining(_ sender: Any) {
uInfoRetrieve.firstName = FNInput.text!
uInfoRetrieve.lastName = LNInput.text!
uInfoRetrieve.userName = usernameInput.text!
uInfoRetrieve.password = passwordInput.text!
uInfoRetrieve.retrieving()
uInfoRetrieve.delegate = self
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension CreateNewAccount: UInfoRetrieveModelDelegate{
func credentialTransfer(data: String) {
print(data)
}
}
答案 0 :(得分:0)
您以错误的顺序致电retrieving()
。请改用以下顺序:
@IBAction func thanksForJoining(_ sender: Any) {
uInfoRetrieve.firstName = FNInput.text!
uInfoRetrieve.lastName = LNInput.text!
uInfoRetrieve.userName = usernameInput.text!
uInfoRetrieve.password = passwordInput.text!
uInfoRetrieve.delegate = self
uInfoRetrieve.retrieving()
}
原因:如果您在设置委托之前调用retreiving()
,则委托将为nil
,并且您不会获得回调。