I know this is a 2 year question. But since I had the same problem and I fixed it here that I found. I bet your NSDictionary has a few keys that are not NSStrings.
Instead of typing like:
[_myDictionay setObject:thisObj forKey:[NSNumber numberWithInt:keyNumber]]
A key like:
[_myDictionay setObject:thisObj forKey:[NSString stringWithFormat:@"%i",numberWithInt:keyNumber]];
This fixed my problem.
The top path cannot be saved in the plist file.
Since you are receiving information from a JSON conversion, it is possible that there are some objects or keys that have NSNumbers there. You will have to convert them. But it is a pain.
So, since you already have it in json, just save it as a whole json string in the @ "data" key and redeploy it when you load plist into your array or dict again.
source share