为啥我不能在 Swift 中使用从一个 UIViewController 传递到另一个(在控制台中打印数据)的数据设置标签?
Posted
技术标签:
【中文标题】为啥我不能在 Swift 中使用从一个 UIViewController 传递到另一个(在控制台中打印数据)的数据设置标签?【英文标题】:Why I cannot set the labels with the data passed from one UIViewController to another (printing the data in console works) in Swift?为什么我不能在 Swift 中使用从一个 UIViewController 传递到另一个(在控制台中打印数据)的数据设置标签? 【发布时间】:2016-03-10 16:37:07 【问题描述】:在我的应用程序中,我在容器中嵌入了 UIViewController。在我的故事板中,我向这个视图控制器添加了一个触摸事件,并调用了 segue: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
这里有什么问题?
【问题讨论】:
你试试 alloc 并像这样初始化那个类:- var showRequestDetails:ShowRequestDetailsFromMap = ShowRequestDetailsFromMap () => 那么它可能会工作..试试吧...... 好的,我试过了,但我收到了这个错误imgur.com/zdmwPRn 在 consol 中获得该数字的日志值?你调试了吗? 我的问题是,即使我在方法changeEventDescr
中写userNumber.text = "aaaa"
,标签也不会更新......我不知道这里可能是什么问题
【参考方案1】:
问题是当调用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)
【讨论】:
等等,我希望我理解清楚 - 我应该创建一个随机字符串变量 (var text = "sth"
),然后将它分配给我在 viewDidLoad() (userNumber.text = text
) 中的标签,然后放入该行userNumber.text = number
又在 changeEventDescr
函数中?
@user3766930 我已经编辑了答案。请立即查看以上是关于为啥我不能在 Swift 中使用从一个 UIViewController 传递到另一个(在控制台中打印数据)的数据设置标签?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在 Swift 3 中使用 JTAppleCalendar Pod 文件 JTAppleCell?
使用 Swift 从 AFNetworking 访问 JSON 数据