如何在UIViewControllers之间传递数据而不显示它

时间:2016-02-22 08:46:20

标签: ios swift

我想在两个不同的UIViewControllers之间移动数据,没有segue也没有推送一个。 关于这个问题有一些问题,但我没有找到任何明确的答案。

我尝试使用protocol / delegate,但我未能正确定义委托vc1.delegate = vc2

我是否必须定义全局变量? 你还有其他想法吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

您可以创建一个单例并存储您要共享的对象:

Singleton.h

Multiple Read

Singleton.m

@interface Singleton : NSObject

@property (nonatomic, strong) YourObjectClass *yourObject;

+ (Singleton *)sharedInstance;
+ (YourObjectClass *)getYourObject;
+ (void)setYourObject:(YourObjectClass *)yourObject;

@end

答案 1 :(得分:1)

对于一般情况,一个共享内存将是无所不能的,因此单例是一种自定义方式。

对于你的情况,你不喜欢全局变量,如果两个控制器都存在,只是无法呈现,我认为有一些方法可以做到:

  1. 发布通知
  2. NSUserDefaults的/ DB /文件
  3. 代表/块
  4. 如果一个或多个控制器不存在,则2)必须正常。

答案 2 :(得分:0)

根据评论,我创建了一个从我的数据类继承的单例类(在Swift中):

import Foundation

class CurrentMyObject: MyObject {

// get the current CurrentMyObject
class var sharedInstance: CurrentMyObject {
    struct Static {
        static var instance: CurrentMyObject?
        static var token: dispatch_once_t = 0
    }
    dispatch_once(&Static.token) {
        Static.instance = CurrentMyObject()
    }
    return Static.instance!
}
}

答案 3 :(得分:0)

“传递数据”是什么意思? 您可以传递Dictionary,也可以传递操作。新控制器只是一个类,所以这意味着你可以分配对象并传递它你想要的东西。

class ViewController1: UIViewController
{
    weak newController : ViewController2?

    override func viewDidLoad() {
        super.viewDidLoad()

        newController = ViewController2()
        newController.dataReceived = [:]
    }

    func presentNewController()
    {
        // Do whatever with `newController`
    }
}

class ViewController2: UIViewController {
    var dataReceived : AnyObject?
}

如果您需要更多解释,可以在此处查看:Passing Data between View Controllers