Ios 为什么我不能用Swift中从一个UIViewController传递到另一个UIViewController(在console works中打印数据)的数据设置标签?
在我的应用程序中,我在一个容器中嵌入了一个UIViewController。在我的故事板中,我向这个viewcontroller添加了一个触摸事件,并调用了segue:Ios 为什么我不能用Swift中从一个UIViewController传递到另一个UIViewController(在console works中打印数据)的数据设置标签?,ios,swift,uiviewcontroller,segue,Ios,Swift,Uiviewcontroller,Segue,在我的应用程序中,我在一个容器中嵌入了一个UIViewController。在我的故事板中,我向这个viewcontroller添加了一个触摸事件,并调用了segue:fullRequestSegue 然后在我写的UIViewController代码中: class RequestDetails: UIViewController, ShowRequestDetailsFromMap { var fullRequestDetails: FullRequestFromMap? override
fullRequestSegue
然后在我写的UIViewController代码中:
class RequestDetails: UIViewController, ShowRequestDetailsFromMap {
var fullRequestDetails: FullRequestFromMap?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "fullRequestSegue"){
fullRequestDetails?.changeEventDescr(self.descr, username: "adam", number: "12", created_at: self.created_at, photo: self.photo)
fullRequestDetails = segue.destinationViewController as? FullRequestFromMap
fullRequestDetails!.showRequestDetails = self
}
}
}
然后在我的类FullRequestFromMap
中,我有:
protocol ShowRequestDetailsFromMap {
func changeEventDescr(text:String)
}
class FullRequestFromMap: UIViewController{
@IBOutlet weak var userNumber: UILabel!
var showRequestDetails:ShowRequestDetailsFromMap?
override func viewDidLoad() {
super.viewDidLoad()
}
func changeEventDescr(description: String, username: String, number: String, created_at: NSDate, photo: String) {
print(username)
print(description)
print(number)
print(created_at)
print(photo) //that works fine, I see all valid data in the console
userNumber.text = number //doesn't work, I see empty label instead of filled with passed data, the same problem is with other labels
}
这里有什么问题?问题是当调用方法
changeEventDescr
时,userNumber
标签未初始化。您正在尝试分配给nil对象
在FullRequestFromMap
类中创建一个字符串变量,并在其中存储文本,在viewDidLoad
方法中,必须将文本分配给userNumber
标签
class FullRequestFromMap: UIViewController {
@IBOutlet weak var userNumber: UILabel!
var showRequestDetails:ShowRequestDetailsFromMap?
var userNumberLabelText:String = "Default Value"
override func viewDidLoad() {
super.viewDidLoad()
userNumber.text = userNumberLabelText
}
func changeEventDescr(description: String, username: String, number: String, created_at: NSDate, photo: String) {
print(username)
print(description)
print(number)
print(created_at)
print(photo)
userNumberLabelText = number // Here you set the class variable, not the label it self
}
}
class RequestDetails: UIViewController {
......
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "fullRequestSegue") {
fullRequestDetails = segue.destinationViewController as? FullRequestFromMap
// Option 1: You can directly assign it
fullRequestDetails?.userNumberLabelText = "12"
// Option 2: You can call your method
fullRequestDetails?.changeEventDescr(self.descr, username: "adam", number: "12", created_at: self.created_at, photo: self.photo)
}
}
}
问题是当调用方法
changeEventDescr
时,userNumber
标签未初始化。您正在尝试分配给nil对象
在FullRequestFromMap
类中创建一个字符串变量,并在其中存储文本,在viewDidLoad
方法中,必须将文本分配给userNumber
标签
class FullRequestFromMap: UIViewController {
@IBOutlet weak var userNumber: UILabel!
var showRequestDetails:ShowRequestDetailsFromMap?
var userNumberLabelText:String = "Default Value"
override func viewDidLoad() {
super.viewDidLoad()
userNumber.text = userNumberLabelText
}
func changeEventDescr(description: String, username: String, number: String, created_at: NSDate, photo: String) {
print(username)
print(description)
print(number)
print(created_at)
print(photo)
userNumberLabelText = number // Here you set the class variable, not the label it self
}
}
class RequestDetails: UIViewController {
......
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "fullRequestSegue") {
fullRequestDetails = segue.destinationViewController as? FullRequestFromMap
// Option 1: You can directly assign it
fullRequestDetails?.userNumberLabelText = "12"
// Option 2: You can call your method
fullRequestDetails?.changeEventDescr(self.descr, username: "adam", number: "12", created_at: self.created_at, photo: self.photo)
}
}
}
您可以这样尝试alloc和init该类:-var showRequestDetails:ShowRequestDetailsFromMap=ShowRequestDetailsFromMap()=>然后它可能会工作..尝试一下..好的,我尝试过了,但我得到了这个错误,在控制台中获取该数字的日志值?你调试过吗?我的问题是,即使我在方法
changeEventDescr
中写入userNumber.text=“aaaa”
,标签也不会得到更新。。。我不知道这里可能会出现什么问题您尝试alloc并初始化该类,如下:-var showRequestDetails:ShowRequestDetailsFromMap=ShowRequestDetailsFromMap()=>然后它可能会工作..尝试一下..好的,我尝试了,但我得到了这个错误,在控制台中获取该数字的日志值吗?你调试过吗?我的问题是,即使我在方法changeEventDescr
中写入userNumber.text=“aaaa”
,标签也不会得到更新。。。我不知道这里可能有什么问题等等,我希望我能清楚地理解它-我是否应该创建一个随机字符串变量(var text=“sth”
),然后在viewdilad()中将它分配给我的标签(userNumber.text=text
)然后将行userNumber.text=number
再次放入changeEventDescr
function?@user3766930我已编辑了答案。请现在检查等待,我希望我能清楚地理解它-我是否应该创建一个随机字符串变量(var text=“sth”
),然后在viewdiload()中将其分配给我的标签(userNumber.text=text
)然后将行userNumber.text=number
再次放入changeEventDescr
function?@user3766930我已编辑了答案。请现在检查