我遇到以下代码的问题:
glTexParameteri()
当我打开此视图并调用方法@IBOutlet var infoBox: UITextView!
LibPerso.startGPSLocationService(completion: {(response:Response, location:CLLocation?) -> Void in
if(response.hasError()){
//...
}
if let currentLocation = location, location != nil, location?.coordinate.latitude != 0, location?.coordinate.longitude != 0{
DispatchQueue.main.async {
print(self.infoBox.text) //#1
self.infoBox.text = "Lat : \(currentLocation.coordinate.latitude) \r\nLng: \(currentLocation.coordinate.longitude)"
print(self.infoBox.text) //#2
}
}
})
(我的库中的方法;它是获取GPS位置的服务)时,每次返回时,我都成功更新了textView。
问题是,当我更改视图(返回上一个视图)并重新打开此视图时,将调用所有代码,但屏幕上不会更新startGPSLocationService
。
我有两个打印语句打印以下内容:
#1:Lat:48.7922072828896 Lng:10.16013687006524
#2:Lat:48.7922120134739 Lng:10.16015784907253
因此收件箱字段已正确更新,但在我的屏幕上,没有任何反应。
我已经尝试过infoBox
或self.infoBox.setNeedsLayout()
,但这也没有改变任何内容。
我认为当我返回并重新打开此视图时,对setNeedsDisplay()
的引用会在流量中丢失。
答案 0 :(得分:0)
很可能与您的描述的这一部分有关:
当我更改视图(返回上一个视图)并重新打开此视图时
听起来好像你有ViewControllerOne(VC1
)和ViewControllerTwo(VC2
)。您的infoBox
位于VC2
。
您可以从VC1
导航到VC2
- 可能使用模式或推送segue - 并设置infoBox
的文字。
然后您导航回VC1
,并在某个时刻“重新开启” VC2
...此时您会感到惊讶infoBox
不再包含先前设置的文本。
这是否相当准确地描述了这种情况?如果是这样,就会出现问题。当您“重新打开此视图”时,您正在创建VC2
的 新 实例 - 当然,它不包含您在infoBox
中设置的文字。您不仅仅是重新显示旧的。
您需要做的是将文本从VC2
传递回VC1
,或者创建某种数据类来存储新文本(或者,更好的是,存储新的Lat / Lon值。)