将 NSString 从 UIViewController 传递到另一个

Posted

技术标签:

【中文标题】将 NSString 从 UIViewController 传递到另一个【英文标题】:Pass NSString from an UIViewController to another 【发布时间】:2015-08-24 22:36:28 【问题描述】:

我正在尝试将字符串值从 ViewController 传递到另一个:

@IBAction func unwindToMasterViewController(segue: UIStoryboardSegue) 

        let viewController:MyViewController = segue.sourceViewController as! MyViewController

        sprite = viewController.sp //sp is NSString declared in MyViewController
        print("the string is \(viewController.sp)")// nothing happens!!!


    

我可以在“离开”MyViewController 之前在我的日志中看到 sp 不是 nil

有没有更好的方法来做到这一点?

编辑:

我想我可能知道这个问题:

在我从MyViewController 获取字符串值之前,在日志中调用@IBAction func unwindToMasterViewController(segue: UIStoryboardSegue)

日志出现的顺序是:

    "the string is "

然后从MyViewController 打印出实际值:

    "sp is testString"

我该如何解决这个问题?

【问题讨论】:

它是否曾经执行过打印语句? @der_michael 是的,它确实执行了打印,但我只在日志中看到“字符串是”,但没有其他内容,甚至没有“null”或“nil” 那么也许可以澄清一下您的问题具体是什么,或者您只是想要一个一般性的建议?因为有多种方法可以在视图控制器之间传递数据。您显示的选项是其中一个有效的选项,它们都在很大程度上取决于您想要实现的目标......您特别不喜欢您的解决方案的哪些方面? 你确定它是从正确的 MyViewController 中分离出来的吗? @der_michaelmy 问题是我什么也得不到。我无法将字符串从一个视图传递到另一个视图。 sp 始终为零。所以基本上我想知道我哪里出错了...... 【参考方案1】:

我这样做了,它对我有用

 @IBAction func cancelButtonTapped(sender: UIButton) 
    self.dismissViewControllerAnimated(true, completion: nil)
    let VC = ViewController()
    let string = VC.sp
    println(string)
    delegate?.addTaskCanceled!("task canceled")


在主要的 VC 中,我在顶部有这个:

  let sp:NSString = "Test"

【讨论】:

【参考方案2】:

好的。这是解决方案,以防其他人遇到此问题。

问题是(怀疑)在我可以将值传递给 NSString 之前调用了 segue。那是因为我使用的是直接从 IB 连接到 MasterView 的 unwind segue。

当我的 UITbleViewCell 被点击 (didSelectRowAtIndexPath) 时,我必须删除展开转场并以编程方式执行此操作。

然后正确的事件顺序展开: 从单元格中获取值,然后执行 segue。 这样,值就按预期传递给了 MasterViewController。

我不知道为什么会发生这种情况,或者在调用动作之前调用 unwind segue 的原因是什么,但 Apple 以神秘的方式工作......

【讨论】:

以上是关于将 NSString 从 UIViewController 传递到另一个的主要内容,如果未能解决你的问题,请参考以下文章

将 NSString 从 UIViewController 传递到另一个

NSData 从 NSKeyedArchiver 到 NSString

如果将一个NSObject从NSDictionary转换为NSString?

将文件路径从 NSString 转换为 NSURL

将(日期+时间)从 NSString 转换为 NSDate 并添加一些小时

如何将 NSString 从 CamelCase 转换为 TitleCase,将“playerName”转换为“Player Name”?