数据不会从一个视图控制器传递到另一个视图控制器

时间:2017-08-22 13:56:42

标签: ios swift

当我尝试将一些变量从一个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中打印,则只打印默认值。

2 个答案:

答案 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使用您当前的对象