Persistent Data

Most common Persistent data mechanism:

There are 4 type of persistent data in iOS

-Property lists

-Object archives (or archiving)

-SQLite3 (iOSís embedded relational database)

-Core Data (Apple provided persistence tool)


Similar to Windows MacOS and IOS has some private folders for application Document,temporary,... you can find those folders path using NSSearchPathForDirectoriesInDomains,example:


let paths = NSSearchPathForDirectoriesInDomains(


NSSearchPathDomainMask.UserDomainMask, true)

let libraryDirectory = paths[0] as String

for Temp folder another useful api is NSTemporaryDirectory() ex:

let tempPath = NSTemporaryDirectory()

let tempFile = tempPath.stringByAppendingPathComponent("tempFile.txt")

the same way that Android OS , IOS keeps files and documents belonging to an app in a private location which is only accessible by the app, 


Property lists supports the following type of data , if your data model consists of only these types you can use Property lists to save data:

Array or NSArray


Dictionary or NSDictionary




String or NSString




Property lists are generally used for settings & preferences


let myArray = [1, 2, 3]

let array = myArray as NSArray (casting for Swift!)

array.writeToFile("/folder/subfolder/myarray.txt", atomically:true)

Save and loading data model using Core data and ManagedObjectContext:

ManagedObjectContext  are the objects scheme recognized by system to manipulate persistent data used in low level layer in Core services , to make use of theme your job consist of 1)get a ManagedObjectContext from your app 2)insert/embed your data model into it.Then you are able to save/Load your data through ManagedObjectContext

We can retrieve ManagedObjectContext within your application by delegation

In fact by choosing "Use Core Data" when creating the project all required stub code for using this delegation will be automatically added to the APPDelegate class as below:

lazy var managedObjectContext: NSManagedObjectContext? = {

    // Returns the managed object context for the application (which is already bound to the persistent store

    // coordinator for the application.) This property is optional since there are legitimate error

    // conditions that could cause the creation of the context to fail.

    let coordinator = self.persistentStoreCoordinator

    if coordinator == nil {

        return nil


    var managedObjectContext = NSManagedObjectContext()

    managedObjectContext.persistentStoreCoordinator = coordinator

    return managedObjectContext


and later we can retrieve this ManagedObjectContext by casting with following code:

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

There a simple code in ViewController showing this:

//Data model

import Foundation

import CoreData

class Contact: NSManagedObject {

    @NSManaged var name: String

    @NSManaged var age: NSNumber



import UIKit

import CoreData

class ViewController: UIViewController {

    @IBOutlet weak var tfName: UITextField!

    @IBOutlet weak var tfAge: UITextField!

    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    override func viewDidLoad() {


        // Do any additional setup after loading the view, typically from a nib.



    @IBAction func onSave(sender: AnyObject) {


       let entityDescription=NSEntityDescription.entityForName("Contact", inManagedObjectContext: managedObjectContext!)


        let contact=Contact(entity:entityDescription!,insertIntoManagedObjectContext:managedObjectContext)

        contact.age=NSNumber(integer: tfAge.text.toInt()!)

        var error:NSError?






    override func didReceiveMemoryWarning() {


        // Dispose of any resources that can be recreated.


    @IBAction func onLoad(sender: AnyObject) {


        let entityDescription = NSEntityDescription.entityForName("Contact",inManagedObjectContext: managedObjectContext!)

        let request = NSFetchRequest()


        request.entity = entityDescription

        var error:NSError?

        var objects = managedObjectContext?.executeFetchRequest(request, error: &error)

        let results = objects



            let match = results?[0] as! NSManagedObject

            tfName.text = match.valueForKey("name") as! String

            var nsAge:NSNumber = match.valueForKey("age") as! NSNumber







 © Xosrov 2016