Andriko13
Andriko13

Reputation: 990

SpriteKit .plist problems xcode 6

I'm working on a game that requires the use of a plist. I set up the plist correctly, or at least I hope, as I've been using this method to set up plists all of the time. The problem though, is that in this case it is like the plist is not even recognized. Here are the contents of my plist: my plist contents

The 'yo' key and value are debug values that I used to see if the plist was even being recognized. Here is my code:

-(NSString *)docsDir{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)    objectAtIndex:0];
}

-(void)UpdatePlist{

listPath = [[self docsDir] stringByAppendingPathComponent:@"details.plist"];
self.savedData = [NSMutableDictionary dictionaryWithContentsOfFile:listPath];

unsigned long storedHighScore = [[self.savedData valueForKey:@"High Score"] unsignedLongValue];

NSLog(@"%@",[[self.savedData valueForKey:@"yo"] stringValue]);
NSLog(@"Here");

if (score>storedHighScore) {
    [self.savedData setValue:[NSNumber numberWithUnsignedLong:score] forKey:@"High Score"];
    NSLog(@"YO %lu",[[self.savedData valueForKey:@"High Score"] unsignedLongValue]);
}

[self.savedData writeToFile:listPath atomically:YES];
}

The problem stems from the code or my declaration of the plist I'm assuming. All of the NSLogs execute, as expected, but my log file is even more interesting: log file

Even the test string does not get returned and gets treated as null. At this point I'm assuming something is wrong with the plist, and yes, I can assure you that the name of the plist is indeed details.plist.

Upvotes: 0

Views: 54

Answers (1)

uliwitness
uliwitness

Reputation: 8843

Where is this plist? When/how is it initially written to the documents directory?

The documents directory is the one into which files are copied from iTunes. So if you put this file into your app's Resources, it will not end up in documents.

When the plist doesn't exist, -dictionaryWithContentsOfFile: will return nil. Calling -objectForKey: or -stringValue on nil returns nil again. So if the file doesn't exist, self.savedData will be set to nil. Calling -writeToFile:atomically: on nil also is a No-op. So the code you posted will never create the plist if it is not already there.

Have you tried stepping through this code in the debugger? Click the gutter to the left of the -dictionaryWithContentsOfFile:-line and see what self.savedData is set to?

Upvotes: 1

Related Questions