Search code examples
iosobjective-cuitableviewnsmutablearraynsuserdefaults

How to save NSMutablearray in NSUserDefaults


I have two NSMutableArray's. They consist of images or text. The arrays are displayed via a UITableView. When I kill the app the data within the UITableView gets lost. How to save array in UITableView by using NSUserDefault?


Solution

  • Note: NSUserDefaults will always return an immutable version of the object you pass in.

    To store the information:

    // Get the standardUserDefaults object, store your UITableView data array against a key, synchronize the defaults
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:arrayOfImage forKey:@"tableViewDataImage"];
    [userDefaults setObject:arrayOfText forKey:@"tableViewDataText"];
    [userDefaults synchronize];
    

    To retrieve the information:

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSArray *arrayOfImages = [userDefaults objectForKey:@"tableViewDataImage"];
    NSArray *arrayOfText = [userDefaults objectForKey:@"tableViewDataText"];
    // Use 'yourArray' to repopulate your UITableView
    

    On first load, check whether the result that comes back from NSUserDefaults is nil, if it is, you need to create your data, otherwise load the data from NSUserDefaults and your UITableView will maintain state.

    Update

    In Swift-3, the following approach can be used:

    let userDefaults = UserDefaults.standard
    
    userDefaults.set(arrayOfImage, forKey:"tableViewDataImage")
    userDefaults.set(arrayOfText, forKey:"tableViewDataText")
    userDefaults.synchronize()
    
    var arrayOfImages = userDefaults.object(forKey: "tableViewDataImage")
    var arrayOfText = userDefaults.object(forKey: "tableViewDataText")