2010-10-17 18 views
6

Mam plist w mojej aplikacji na iphone i chcę odczytać i zapisać liczbę całkowitą z mojego pojedynczego do i utworzyć go.Zapis/odczyt pliku plist iPhone

mam to, aby ją przeczytać:

scoreData *score = [scoreData sharedData]; 

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

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

Następnie napisać do niego:

scoreData *score = [scoreData sharedData]; 

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

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

Otrzymuję błąd w obu częściach:

Nieprawidłowy konwersji forma objc_object * do int

i

Niepoprawny formularz konwersji int do objc_object

Doceniam każdą pomoc, dzięki.

Odpowiedz

7

dwie rzeczy:

  1. Podczas ustawiania klucza w słowniku, you're probably aftersetObject:forKey: zamiast setValue:forKey:.

  2. Słowniki przechowują obiekty (typ id lub NSString* lub własne obiekty Obj-C), a nie typy pierwotne (int, BOOL itd.).

Kiedy chcesz zapisać prymitywny typ w kolekcji Obj-C, można „owinąć” to w obiekcie tak:

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

i dostać go z powrotem tak:

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

Buduje bez błędów nw, co jest świetne! Ale zmienię score.highScore, a następnie całkowicie zakończę aplikację, ponownie uruchomię ją i cofnę do zera, nigdy nie odzyska ona wartości. Doceniłbym pomoc, dzięki. –

+0

Interesujące odkrycie. Myślę, że kod, którego używam, piszę do plist i czytając go, ale tak naprawdę nie zapisuję go, kiedy następnym razem używam aplikacji. Możliwy? Jak mogę to obejść? –

+0

Prawdopodobnie nie działa, ponieważ próbujesz napisać słownik do pliku .plist w pakiecie aplikacji, który jest tylko do odczytu. Powinieneś sprawdzić zwróconą wartość '[plistDict writeToFile: filePath atomically: YES];' (TAK = sukces, NIE = zapis nieudany). Spróbuj napisać plik do ścieżki w folderze dokumentów pakietu aplikacji, czyli do odczytu i zapisu.Można uzyskać ścieżkę dokumentów za pomocą: NSArray * arrayPaths = \t \t NSSearchPathForDirectoriesInDomains ( \t \t \t NSDocumentDirectory, \t \t \t NSUserDomainMask, \t \t \t TAK); \t NSString * docDir = [arrayPaths objectAtIndex: 0]; –