Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSDictionary writeToFile

Is there a size limit to saving dictionaries?

I am attempting to write a rather large dictionary with around 100 keys with nested dictionaries using writeToFile: but it never writes and is always false.

Is this a limitation or am I doing something incorrect,

The code i use is the following.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *fullPath = [documentsDir stringByAppendingPathComponent:@"test.plist"];   

[myDict writeToFile: fullPath  atomically:YES];
like image 393
jodm Avatar asked Aug 11 '10 15:08

jodm


2 Answers

There is one more trick to this, besides using only eligible objects (instances of NSNumber, NSString, NSData etc) the keys have to be NSString objects. Normally you can use any object for NSDictionary key but to have a successful writeToFile: the keys in the NSDictionary need to be instances NSString.

like image 116
Otuk Avatar answered Dec 07 '22 03:12

Otuk


There is no size limit (save for memory and disk space).

What are the contents of myDict?

If it is anything but the small set of classes allowed in property lists, then you can't use writeToFile:atomically:.

Either you would need to limit your dictionary to only containing instances of those classes or you will need to use a different archiving method.

In particular, a lot of the JSON libraries will spew NSNULL instances into the collections. Those can't be archived. You need to either edit them out or replace them with objects that can be archived.

Of relevance:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Archiving/Archiving.html#//apple_ref/doc/uid/10000047i

like image 30
bbum Avatar answered Dec 07 '22 04:12

bbum