Как хранить данные значения ключа для приложений какао в самом приложении? - PullRequest
2 голосов
/ 27 ноября 2011

У меня есть информационный словарь, который содержит данные пользователя. В настоящее время он записывается в XML-файл в том же каталоге, что и приложение. Тем не менее, я почти уверен, что какао позволяет мне записать этот xml-файл в комплект приложения или в какой-либо каталог ресурсов в приложении.

Может ли кто-нибудь научить меня, как это сделать?

1 Ответ

1 голос
/ 27 ноября 2011

Вы можете использовать NSFileManager - createFileAtPath:contents:attributes: в NSDocumentDirectory (относительно вашего пакета это /Documents) с NSData вашего xml-файла.
Примерно так:

NSString *myFileName = @"SOMEFILE.xml";
NSFileManager *fileManager = [NSFileManager defaultManager];

// This will give the absolute path of the Documents directory for your App
NSString *docsDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

// This will join the Documents directory path and the file name to make a single absolute path (exactly like os.path.join, if you python)
NSString *xmlWritePath = [docsDirPath stringByAppendingPathComponent:myFileName];

// Replace this next line with something to turn your XML into an NSData
NSData *xmlData = [[NSData alloc] initWithContentsOfURL:@"http://someurl.com/mydoc.xml"];

// Write the file at xmlWritePath and put xmlData in the file.
BOOL created = [fileManager createFileAtPath:xmlWritePath contents:xmlData attributes:nil];
if (created) {
    NSLog(@"File created successfully!");
} else {
    NSLog(@"File creation FAILED!");
}

// Only necessary if you are NOT using ARC and you alloc'd the NSData above:
[xmlData release], xmlData = nil;

Некоторые ссылки:

NSFileManager Справочные документы
NSData Справочные документы


Редактировать

В ответ на ваши комментарии это будет типичное использование NSUserDefaults для сохранения сериализуемых данных между запусками приложения:

// Some data that you would want to replace with your own XML / Dict / Array / etc
NSMutableDictionary *nodeDict1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"object1", @"key1", nil];
NSMutableDictionary *nodeDict2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"object2", @"key2", nil];
NSArray *nodes = [NSArray arrayWithObjects:nodeDict1, nodeDict2, nil];

// Save the object in standardUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:nodes forKey:@"XMLNODELIST"];
[[NSUserDefaults standardUserDefaults] synchronize];

Чтобы получить сохраненное значение (при следующем запуске приложения или из другой части приложения и т. Д.):

NSArray *xmlNodeList = [[NSUserDefaults standardUserDefaults] arrayForKey:@"XMLNODELIST"];

NSUserDefaults Справочные документы

...