Mehmet
Mehmet

Reputation: 3347

Passing an object between controller Swift

I have a storyboard which start with a login page. And I have a User class like this

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
    }


}

I am generating some values in login page, and I can create my User object with these values.

Now I want to make this object global and use this user object in all scene.

How to pass this object to other scenes? For example I want to pass this values with my object to an embed static table view controller like this

enter image description here

Note: Does it matter, the embed controller has a tab bar controller? I guess I need to use my delegate file?

EDIT:

Now I have created my global object like this:

// test value
let firmId = "Company Id"

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

And trying to get my object like this:

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

// checking
println(getValue!)

AND done, return my value on termanal. All work until here.

But now the value return to me as AnyObject, I need the convert it String to apply like this:

someLabel.text = getValue!

Upvotes: 3

Views: 1973

Answers (2)

Dharmesh Kheni
Dharmesh Kheni

Reputation: 71852

You can use NSUserDefaults for that like you can store your object this way:

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

After that you can access it in any scene like:

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

Hope It will help you.

EDIT:

NSUserDefaults is limited in the types it can handle: NSData, NSString, NSNumber, NSDate, NSArray, and NSDictionary. Thus no Swift objects or structs can be saved.

From the Apple NSUserDefaults Docs:

A default object must be a property list, that is, an instance of (or for collections a combination of instances of): NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any other type of object, you should typically archive it to create an instance of NSData.

And if you are using NSUserDefaults then you can directly store your instance like shown below:

NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmCode")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmId")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "userId")

You Don't need model class for that.

Upvotes: 4

iOS Dev
iOS Dev

Reputation: 195

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

//Assign value to other variables

//Save User object in NSUserDefaults as like this

 User.saveUserObject(user)

//Function For Save User

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

//Get User Object from NSUserDefaults

class func getUserObject(userIDValue : NSNumber) -> User? {
    let userKey = "UserData \(userIDValue)"
    if let data = NSUserDefaults.standardUserDefaults().objectForKey(userKey) as? NSData {
        return data as? User
    }
    return nil
}

Upvotes: 0

Related Questions