当我尝试将一些变量从一个VC传递到另一个VC时,VC i中的变量传递给,不会更新。以下是我到目前为止所做的工作:
VC 1
var note: String = ""
var reward: Int = 0
var deadline: Int = 0
VC 2
var vcOne = VcOne()
var note: String = "Some note..."
var reward: Int = 100
var deadline: Int = 988934
在我弹出VC 2的函数中,我从那个传递数据来更新VC 1,如下所示:
func passData()
{
vcOne.note = self.note
vcOne.reward = self.reward
vcOne.deadline = self.deadline
navigationController?.popViewController(animated: true)
}
但是当我通过后在VC 1中打印值时,它们仍为空或0。
之前我使用过这种方法来传递数据,但这次它似乎没有用。我应该采用不同的方式吗?什么是传递数据的最佳方式,就像我展示的方式一样?
编辑:这是我的真实代码
VC 1:
class CreateMissionController: UIViewController, UITextViewDelegate
{
var deadline: Int = 0
var missionLatitude: Double = 0
var missionLongitude: Double = 0
func handleSetLocation()
{
let createMapController = CreateMapController()
navigationController?.pushViewController(createMapController,animated: true)
}
VC 2
class CreateMapController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate
{
var createMissionController: CreateMissionController?
var missionLatitude: Double?
var missionLongitude: Double?
var deadline: Int?
func handleChooseLocation()
{
missionLatitude = missionLocation!.latitude
missionLongitude = missionLocation!.longitude
createMissionController?.missionLatitude = missionLatitude!
createMissionController?.missionLongitude = missionLongitude!
let timeInterval = deadlineDate?.timeIntervalSince1970
let deadlineInt = Int(timeInterval!)
createMissionController?.deadline = deadlineInt
print(missionLatitude!)
print(missionLongitude!)
print(deadlineInt)
navigationController?.popViewController(animated: true)
}
当我在VC 2中打印时,它们显示正确的值,但是如果我在VC 2中执行了该功能后尝试在VC 1中打印,则只打印默认值。
答案 0 :(得分:1)
在VC2中,您可以使用var vcOne = VcOne()
创建新的VC1。对数据进行传递时,您可能会将其传递给错误的实例。
您应该将该属性定义为:
var vcOne: VC1
并改为传递现有实例
<强>更新强>
您必须设置对任务VC的引用:
func handleSetLocation()
{
let createMapController = CreateMapController()
createMapController.createMissionController = self
navigationController?.pushViewController(createMapController,animated: true)
}
答案 1 :(得分:1)
VC1
var note: String = ""
var reward: Int = 0
var deadline: Int = 0
var vc2 = VcTwo()
vc2.vcOne = self
VC 2
var vcOne : VcOne
var note: String = "Some note..."
var reward: Int = 100
var deadline: Int = 988934
func passData()
{
vcOne.note = self.note
vcOne.reward = self.reward
vcOne.deadline = self.deadline
navigationController?.popViewController(animated: true)
}
正如我在评论中提到的那样,您重新分配了一个新的vcOne,因此您设置了另一个对象并且无法获取数据。
通过将vc2.vcOne
分配给自己,您告诉vc2使用您当前的对象