Запазване на данни с NSUserDefaults

Това е класически проблем на iOS - къде трябва да запазя данните си? Сега написах няколко приложения за iOS и използвах основни данни, както и plist файлове. Освен това обикновено използвам NSUserDefaults за запазване на потребителски настройки, което по същество е един малък речник с ключове и стойности. По мое (може би неправилно) мнение, NSUserDefaults е най-простият начин за съхраняване на информация, която се изисква глобално в приложение.

Имам релационни данни, които се изтеглят от сървър като JSON обект и се чудех докъде мога да прокарам NSUserDefaults. Моите данни може да са с размер от няколко мегабайта. Знам, че NSUserDefaults ще се справи с това, както се опитах, но има ли рискове, свързани със запазването на данните по този начин, въпреки факта, че не е непременно за съхраняване на големи големи количества данни? Приложението ми ще бъде ли отхвърлено? Може ли потенциално да има проблеми с паметта и производителността?


person Rambatino    schedule 02.11.2013    source източник
comment
Вижте stackoverflow.com/questions/5520797/   -  person Paul Cezanne    schedule 02.11.2013
comment
и stackoverflow.com/questions/6173625/ особено отговорът, който споменава основната нишка.   -  person Paul Cezanne    schedule 02.11.2013
comment
Не мога да добавя повече информация към отговора на @PaulCezanne, но AFAIK приложението ви няма да бъде отхвърлено, ако отидете с NSUserDefaults за съхраняване на големи данни.   -  person amb    schedule 02.11.2013


Отговори (1)


Определено трябва да използвате друг механизъм. NSUserDefaults е добре за малки стойности, но за по-големи можете да използвате файловата система. Например:

    NSString* path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    path = [path stringByAppendingPathComponent:@"Private Documents"];
    path = [path stringByAppendingPathComponent:@"YourAppName"];
    [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];

    NSString *filePath = [self.basePath stringByAppendingPathComponent:@"filename.json"];

    // Now save or load the data using NSData or an NSInputStream
    NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:resource];
    [inputStream open];

    id object = [NSJSONSerialization JSONObjectWithStream:inputStream options:0 error:nil];

    // you can write JSON objects in a similar way
person gimenete    schedule 02.11.2013