user6631314
user6631314

Reputation: 1960

IOS/Objective-C: Save Custom Array as NSUserDefault

I am trying to save an array of objects into an NSUserDefault without success. When I log out the array before the attempt it is full of object. However, when I try to log out the NSUserDefault it is NULL. Can anyone see what I might be doing wrong? Thanks for any suggestions:

 Items *myItems = [mutableFetchedObjects mutableCopy];
    NSLog(@"my Items%@",myItems);//LOGS OUT LONG LIST OF ITEMS
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myItems];
    [currentDefaults setObject:data forKey:@"myItems"];
[currentDefaults synchronize];
    Items *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"myItems"] mutableCopy];
    NSLog(@"my Retrieved Items%@",myRetrievedItems); //LOGS OUT AS NULL

Upvotes: 0

Views: 73

Answers (3)

YoungEagle
YoungEagle

Reputation: 31

Your access value method is wrong.

You can get the array in following code:

Items *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] objectForKey:@"myItems"] mutableCopy];

Upvotes: 0

Akshay Sunderwani
Akshay Sunderwani

Reputation: 12476

You have to unarchive your data first at the time of retrieving back. You are directly accessing the data. This won't work. You can do it the similar way you are archiving the data

NSData *dataObj = [currentDefaults objectForKey:@"myItems"];

Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj];

For more reference, you can consider this answer.

Hope this helps. Thanks!

Upvotes: 1

GeneCode
GeneCode

Reputation: 7588

As the other answers mentioned, it is because your array is not complying to the NSDictionary types (string, binary, bool, etc). Your members of array is of custom types therefore it cannot be saved. What you need to do is convert your array to binary first and then save it.

Upvotes: 1

Related Questions