I found out one alternative, before save, I encode the root object (NSArray object) using NSKeyedArchiver, which ends with NSData. Then use UserDefaults save the NSData. When I need the data, I read out the NSData, and use NSKeyedUnarchiver to convert NSData back to the object. It is a little cumbersome, because i need to convert to/from NSData everytime, but it just works. Here is one example per