2012-04-14 9 views
1

Datei Wenn ich diesen Code versuchen:Plist schreibt nicht

if ([[NSFileManager defaultManager] fileExistsAtPath:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist"] == NO) { 
    NSMutableDictionary* tempDict = [[NSMutableDictionary alloc]initWithObjectsAndKeys: 
            [[NSString alloc] initWithString:@"0"],@"completedGames", 
            [[NSString alloc] initWithString:@"0"],@"floatsCollected", 
            [[NSString alloc] initWithString:@"0"],@"sec", 
            [[NSString alloc] initWithString:@"0"],@"subScore", 
            [[NSString alloc] initWithString:@"0"],@"highScore", 
            [[NSString alloc] initWithString:@"0"],@"longestSec", nil]; 

    [tempDict writeToFile:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist" atomically:YES]; 

    NSLog(@"written file"); 

} 

und diese Ausgänge mit

2012-04-14 19:15:10.009 Staying Afloat[3227:9c07] written file 

so die Schleife ausgeführt wird, aber die Datei geschrieben wird, nicht wahr? Kann mir jemand in die richtige Richtung zeigen, um Plisten an nicht lokalisierten Orten zu speichern?

EDIT: dies für Mac ist

+0

Gibt es die Direktionen "Staying Afloat/stats /"? –

+1

Sie könnten 'writeToFile: Optionen: error:' versuchen, um die Fehlermeldung zu bekommen ... – jtbandes

+0

@jonas: es existiert nicht – ExceptionSlayer

Antwort

6

Sie müssen Ihren Weg erweitern -(NSString *)stringByExpandingTildeInPath verwenden, wenn Sie schreiben, und prüfen Sie, ob die Datei vorhanden ist.

Bearbeiten: Lesen Sie die Methode in der NSDictionary Dokumentation. Es sagt

If path contains a tilde (~) character, you must expand it with stringByExpandingTildeInPath before invoking this method.

So tun nur so etwas wie

[tempDict writeToFile:[[NSString stringWithString:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist"] stringByExpandingTildeInPath] atomically:YES];
1

ersten kann man nicht einfach schreiben:

[tempDict writeToFile:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist" atomically:YES]; 

NSLog(@"written file"); 

, weil Sie nicht überprüfen, ob die Datei wirklich mit Erfolg geschrieben wurde oder nicht.

sollten Sie schreiben:

if([tempDict writeToFile:@"~/Library/Application Support/Staying Afloat/stats/static-stats.plist" atomically:YES]) { 
    NSLog(@"written file"); 
} else { 
    NSLog(@"file not written"); 
} 

WriteToFile Methode ein Boolean zurückgibt.

+0

es gibt "Datei nicht geschrieben" – ExceptionSlayer

0

Ich benutze immer NSUserDefaults, die kümmert sich um alles für Sie mit Dingen wie Benutzer-Prefs oder Speichern von App-Status zwischen laufen. Aus der Spitze meines Kopfes würde ich vorschlagen, dass Sie nicht die richtigen Privilegien haben, um ein Plist zu schreiben und was passiert, wenn Sie versehentlich einen wichtigen Schlüssel und Wert für das Betriebssystem zerstören? Werfen Sie einen Blick auf

Best practices for handling user preferences in an iPhone MVC app?

+3

Lesen Sie die Tags, er tut dies für einen Mac, nicht iOS. – TheAmateurProgrammer

+1

-1, es geht um MacOS! –

+0

Hoppla. Vielleicht sollte ich keinen kleinen Bildschirm benutzen, um Fragen zu beantworten! Mein Fehler. – Todd

0

Sind Sie sicher, -writeToFile:atomically: kehrt YES?

+0

Es tut für iOS, klicken Sie mit der rechten Maustaste auf 'writeToFile' und lesen Sie die kurze Beschreibung. Gibt YES zurück, wenn die Datei erfolgreich geschrieben wurde, andernfalls NEIN. – JScarry

+0

Ich sage nicht, dass es nicht oder nicht JA zurückgeben kann. Nur das sollten Sie wie NSLog überprüfen (@ "% d", [... writeToFile: atomically:]); –