2014-04-11 13 views
6

Podczas zapisywania niewielkich ilości danych z poziomu mojej aplikacji lepiej jest użyć NSUserDefaults lub NSCoding? W tej chwili używam NSCoding (encodeWithCoder/initWithCoder itp.), Ale wydaje się, że NSUserDefaults może być prostsze. Moje pełne dane dotyczą różnych Ints/Strings/MutableArray, tylko około kilkudziesięciu razem.NSUserDefaults vs NSCoding

+1

Ty porównywanie jabłek z pomarańczami. Możesz użyć NSCoding, aby zapisać coś w NSUserDefaults, więc jaki kontrast próbujesz narysować? – matt

+0

Brzmi to, jak chcesz, "NSPropertyListSerialization". – iluvcapra

+1

Aby dalej było matowo stwierdzone, NSCoding nie jest w ogóle mechanizmem zapisu. Co robisz z zakodowanymi danymi? To właśnie powinieneś porównać z użyciem NSUserDefaults. – rmaddy

Odpowiedz

4

Zakładam, że przez NSCoding masz na myśli "zapisywanie obiektów do plików po serializacji ich za pomocą interfejsów API NSCoding". Chociaż oba podejścia są poprawne w przypadku prymitywnych typów danych, podejście NSUserDefaults staje się trudniejsze po rozpoczęciu serializowania obiektów o złożonych strukturach.

W przeciwieństwie do tego zapisywanie danych klas NSCoding do plików zapewnia wysoki stopień elastyczności pod względem struktury obiektu. Jeśli wiesz, że nie będziesz potrzebować tej elastyczności w przyszłości, przejdź pod numer NSUserDefaults; jeśli nie jesteś pewien, pozostań przy plikach.

+0

Tak, twoje założenie jest poprawne (moje pytanie powinno być wyraźniejsze). Będę trzymać się metody NSCoding/file, ponieważ już działa. Dzięki. – wayneh

0

To jest moje preferencje, aby użyć pliku plist programowo, który jest utworzony

NSString *appFile; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    appFile = [documentsDirectory stringByAppendingPathComponent:@"myFile"]; 
    //this creates the file path 


    NSDictionary* tempDict = [[NSDictionary alloc]initWithContentsOfFile:appFile]; 
    //this gets the data from storage 

    [tempDict writeToFile:appFile atomically:YES]; 
    //this updates the data to storage 
Powiązane problemy