在控制器Swift之间传递一个对象

时间:2015-06-24 09:30:33

标签: ios swift uitableview xcode6 storyboard

我有一个以登录页面开头的故事板。我有一个像这样的用户类

class User {
    // Properties
    var firmCode : String
    var firmId : String
    var userId : String

    // Default Initializer
    init() {
        self.firmCode = ""
        self.firmId = ""
        self.userId = ""

    }

    // Defult Initializer with prams
    init(firmCode: String, firmId: String, userId: String) {
        self.firmCode = firmCode
        self.firmId = firmId
        self.userId = userId
    }


}

我在登录页面中生成了一些值,我可以用这些值创建我的User对象。

现在我想将此对象设为全局,并在所有场景中使用此用户对象。

如何将此对象传递给其他场景?例如,我想将此值与我的对象一起传递给嵌入式静态表视图控制器,如此

enter image description here

注意:重要的是,嵌入式控制器有标签栏控制器吗?我想我需要使用我的委托文件?

编辑:

现在我已经创建了这样的全局对象:

// test value
let firmId = "Company Id"

// Creating user object without user class declaration
NSUserDefaults.standardUserDefaults().setObject(firmId, forKey: "testFirmId")

试图让我的对象像这样:

// Creating user variable in other scene by globally
let getValue : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("testFirmId")

// checking
println(getValue!)

完成后,返回我的termanal值。所有工作都在这里。

但是现在这个值以AnyObject的形式返回给我,我需要将它转换为String来应用如下:

someLabel.text = getValue!

3 个答案:

答案 0 :(得分:4)

您可以使用NSUserDefaults,就像您可以这样存储对象一样:

NSUserDefaults.standardUserDefaults().setObject(YourObject, forKey: "YouKey")

之后,您可以在任何场景中访问它,如:

let yourObject: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YouKey")

希望它会对你有所帮助。

修改

NSUserDefaults的处理类型有限:NSDataNSStringNSNumberNSDateNSArray和{{ 1}}。因此,不能保存Swift对象或结构。

来自Apple NSDictionary文档:

  

默认对象必须是属性列表,即(或   对于集合的实例组合):NSData,NSString,   NSNumber,NSDate,NSArray或NSDictionary。如果你想存储任何   在其他类型的对象中,通常应将其存档以创建   NSData的实例。

如果您使用的是NSUserDefaults,那么您可以直接存储您的实例,如下所示:

NSUserDefaults

你不需要那个模型类。

答案 1 :(得分:0)

  float (*mat)[3];
  mat = hydra.controllerRight.rot_mat;

  float x1 = mat[0][0];
  float x2 = mat[0][1];
  float x3 = mat[0][2];
  float x4 = 0;

  float y1 = mat[1][0];
  float y2 = mat[1][1];
  float y3 = mat[1][2];
  float y4 = 0;

  float z1 = mat[2][0];
  float z2 = mat[2][1];
  float z3 = mat[2][2];
  float z4 = 0;

  float w1 = 0;
  float w2 = 0;
  float w3 = 0;
  float w4 = 1;

  // my 4x4 rotation matrix
  MatrixF rotMat( x1, x2, x3, x4,
                  y1, y2, y3, y4,
                  z1, z2, z3, z4,
                  w1, w2, w3, w4 );

//为其他变量分配值

//在NSUserDefaults中保存用户对象,如下所示

var user = User()
self.user.firmCode = 1

//保存用户的功能

 User.saveUserObject(user)

//从NSUserDefaults获取用户对象

 class func saveUserObject(user : User){
 let userKey = "UserData \(user.userID)"
NSUserDefaults.standardUserDefaults().setObject(data, forKey: userKey)
}

答案 2 :(得分:0)

如果您真的想要一个全局用户对象,只需在全局创建它,意味着超出任何范围。 Tadaa!您可以从任何地方访问它。

var globalUser = User()

// This is where your 'normal code' starts
class [....]