2010-11-02 13 views
19

Chciałbym szeregować szereg danych i zapisać je w pliku, a następnie załadować (naturalnie) i odtworzyć z użyciem funkcji, którą napisałem. (Przepraszam, jeśli moja terminologia jest wyłączona, jestem początkującym z tego typu rzeczami.) Jaki jest najlepszy sposób na zrobienie tego z iOS? Patrząc na dokumentacji tutaj:Jakie są opcje zapisywania danych w systemie iOS?

Standard Application Behaviors Guide

I zostały zebrane, że powinienem użyć NSSearchPathForDirectoriesInDomains za znalezienie Katalog główny właściwe przechowywanie (dokumenty?), A następnie użyć NSData przechowywać te bufory danych utworzyć i zapisać je do pliku. Czy mam na to rację, czy też źle to rozumiem? Jakieś inne mędrcze rady?

+4

przyjąć odpowiedź? – golddove

Odpowiedz

18

Możesz użyć plist.
Zapisanie listy ciągów lub innych danych bez korzystania z danych podstawowych jest bardzo łatwe.
Zobacz Property List Programming Guide

Na przykład, kod ten będzie zapisać obiektu (rootObj), która może być tablicą lub słownika:

NSString *error; 
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"yourFile.plist"]; 
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:rootObj 
                   format:NSPropertyListXMLFormat_v1_0 
                errorDescription:&error]; 
if(plistData) { 
    [plistData writeToFile:plistPath atomically:YES]; 
} 
else { 
    NSLog(@"Error : %@",error); 
    [error release]; 
} 

Istnieją pewne ograniczenia obsługiwanych klasy (patrz instrukcja)

+4

dataFromPropertyList jest przestarzałe. – Jackson

+0

Błąd: ARC zabrania jawnego wysyłania wiadomości o "zwolnieniu" – Kamal

13

To zależy od danych, które piszesz. Jeśli chcesz serializować obiekty, zobacz protokół NSCoding. Jeśli masz jakąś prostą strukturę danych, która nie jest klasą, możesz ją zapisać w pliku NSDictionary i zapisać w pliku plist. A jeśli masz duży fragment danych (np. Tysiące elementów pływających lub coś podobnego), możesz zapisać to przy użyciu NSData, jak już wskazałeś. W każdym razie koniecznie przeczytaj Archives and Serializations Programming Guide, aby nie odkrywać koła na nowo.

Powiązane problemy