2011-06-10 16 views
13

Używam kodu znalezionego w tym poście: Mulitple Arrays From Plist, z tym samym formatowaniem plist.Zapisz NSDictionary na plist

To działa poprawnie, ale nie wiem, jak zapisać utworzone tablice z powrotem do plist, w tym samym formacie.

Jak to osiągnąć?

EDYCJA: To nie tyle oszczędności, ile potrzebuję, ale tworzenie danych do zapisania.
Plik jest tablicą słowników z ciągami znaków i odpowiadającymi im klawiszami. Wszystkie ciągi z określonym kluczem są umieszczane w tablicy własnych.

Jak umieścić tablicę z powrotem w odpowiednich pozycjach w tablicy słowników, aby zapisać?

Odpowiedz

14

Nie zapomnij utworzyć myPlistFile.plist i dodaj go do folderu zasobów aplikacji.

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

można tu skanować ścieżki i wyszukiwać myPlistFile.plist używając pętli for.

NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"myPlistFile.plist"]; 
if (![[NSFileManager defaultManager] fileExistsAtPath: plistPath]) 
{ 
      NSString *bundle = [[NSBundle mainBundle] pathForResource:@"myPlistFile" ofType:@"plist"]; 
      [[NSFileManager defaultManager] copyItemAtPath:bundle toPath:plistPath error:&error]; 
} 
[myDict writeToFile:plistPath atomically: YES]; 
+1

to nie zadziała, ponieważ mainBundle jest tylko do odczytu –

+0

@Ashley Staggs: Sprawdź zaktualizowaną odpowiedź. – Jhaliya

+0

Wiem, gdzie zamierzam to zapisać, ale to formowanie, które muszę poprawić. –

22

Oto najprostszy sposób:

NSDictionary* dict = ...; 
[dict writeToFile:@"..." atomically:YES]; 

Zobacz dokumentację dla -writeToFile:atomically:.

+0

wiem, że to będzie zapisać plik, ale nie sądzę, to okaże tablice utworzone z powrotem do PLIST w ten sam sposób z array-> dictionary-> string –

+6

Czy próbowałeś? Może napisać do pliku plist wszystko, co można odczytać z plist. O ile nie zmienisz sposobu, w jaki zamawiasz dane w słowniku, powinien on wypisać dokładnie w ten sam sposób. –

+1

** Najważniejsze ** - Ta metoda rekursywnie sprawdza, czy wszystkie zawarte obiekty są obiektami listy właściwości (wystąpienia 'NSData',' NSDate', 'NSNumber',' NSString', 'NSArray' lub' NSDictionary') przed wypisaniem pliku i zwraca "NO", jeśli wszystkie obiekty nie są obiektami listy właściwości, ponieważ wynikowy plik nie byłby poprawną listą właściwości. – enadun

0

I odwrotnie, aby załadować NSDictionary z pliku:

+ (id)dictionaryWithContentsOfFile:(NSString *)path;