2010-10-17 17 views
6

Ho plist nella mia app per iPhone e voglio leggere e scrivere un numero intero dal mio singolo e formarlo.Scrivi/Leggi file plist iPhone

ho questo leggerlo:

scoreData *score = [scoreData sharedData]; 

filePath = @"stats.plist"; 
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

score.highScore = [plistDict objectForKey:@"score"]; 

Poi, per scrivere su di esso:

scoreData *score = [scoreData sharedData]; 

NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

[plistDict setValue:score.highScore forKey:@"score"]; 
[plistDict writeToFile:filePath atomically: YES]; 

sto ottenendo un errore in entrambe le parti:

conversione non valido modulo objc_object * a int

e

Form di conversione non valido int to objc_object

Apprezzo qualsiasi aiuto, grazie.

risposta

7

due cose:

  1. Quando si sta impostando una chiave in un dizionario, you're probably aftersetObject:forKey: invece di setValue:forKey:.

  2. I dizionari tengono gli oggetti (tipo id o NSString* oi propri oggetti Obj-C), non i tipi primitivi (int, BOOL, ecc.).

Quando si desidera memorizzare un tipo primitivo in una collezione Obj-C, si può "avvolgere" in un oggetto come questo:

[plistDict setObject:[NSNumber numberWithInt:score.highScore] forKey:@"score"]; 

E tornare indietro in questo modo:

score.highScore = [[pListDict objectForKey:@"score"] intValue]; 
+0

Costruisce senza errori nw che è fantastico! Ma cambio score.highScore, quindi esco completamente dall'app, rilancio e il suo ritorno a zero, non ottiene mai il valore indietro. Gradirei l'aiuto, grazie. –

+0

Scoperta interessante. Penso che il codice che sto usando lo scriva e lo stia leggendo ma in realtà non lo sto salvando per quando utilizzerò l'app. Possibile? Come posso aggirare questo? –

+0

Probabilmente non funziona perché stai provando a scrivere il dizionario in un file .plist all'interno del tuo pacchetto App, che è di sola lettura. Dovresti controllare il valore restituito di '[plistDict writeToFile: filePath atomically: YES];' (SÌ = successo, NO = scrittura fallita). Provare a scrivere il file in un percorso nella cartella dei documenti del pacchetto di app, che è in lettura-scrittura.È possibile ottenere il percorso dei documenti utilizzando: NSArray * arrayPaths = \t \t NSSearchPathForDirectoriesInDomains ( \t \t \t NSDocumentDirectory, \t \t \t NSUserDomainMask, \t \t \t SI); \t NSString * docDir = [arrayPaths objectAtIndex: 0]; –