I’m having several issues based around reading and writing an NSArray to and from a plist.
I have created a plist file in the ‘Supporting Files’ folder which I want to use to initialise the app data with upon the first load.
Here is what my plist looks like:

I then use this code to try load the plist into the app:
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
filePath = [documentsDirectory stringByAppendingPathComponent:kDataFile];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath])
{
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath:filePath error:&error];
}
I then try to load the data from the plist file like so, however nothing seems to be displayed.
NSMutableDictionary *savedData = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
NSMutableArray *myNSArray = [[savedData objectForKey:@"KEY_Level_1"] mutableCopy];
savedData = nil;
Sorry if this is a simple task, however I’ve been looking at lots of tutorials and trying to work out how to do this with no luck. I’m getting really frustrated now – I would have thought it should be a simple thing to do.
NOTE: My NSArray will contain a whole bunch of NSDictionaries.
You need to check the return value of
copyItemAtPath:toPath:error:and at least log the error if the method returns false:-[NSDictionary initWithContentsOfFile:]has no way to report errors, so if it’s failing, you cannot easily figure out why. Try reading the file into anNSDataand using-[NSPropertyListSerialization propertyListWithData:options:format:error:]to parse it:If you do this, you’ll be able to more easily see why your data is not being loaded.
UPDATE
On further inspection, it looks like the top-level dictionary in your plist contains the key “Root”. The value for “Root” is a dictionary containing the key “KEY_Level_1”. So you need to do this: