писать NSArray обратно в список - PullRequest
3 голосов
/ 07 октября 2011

У меня есть лист со следующим форматом:

enter image description here

А вот как я это прочитал:

NSString *errorDesc = nil;
    NSPropertyListFormat format;

    NSString *path = [[NSBundle mainBundle] pathForResource:@"States" ofType:@"plist"];    
    NSData  *plistXML = [[NSFileManager defaultManager] contentsAtPath:path];
    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization                     
                                          propertyListFromData:plistXML
                                          mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                          format:&format
                                          errorDescription:&errorDesc];

    self.statesData = [temp objectForKey:@"Root"];

Вопрос в том, хочу ли я написать этот NSMutableArray с именем self.statesData обратно в plist, как бы я это сделал? Я думаю, что-то вроде этого не будет работать ...

 NSString *path = [[NSBundle mainBundle] pathForResource:@"States" ofType:@"plist"];  
    [self.main.statesData writeToFile:path atomically: YES];

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

В iOS вы не можете записывать файлы в оболочку вашего приложения (а в MacOS X вы действительно не должны).Вам нужно сначала скопировать в папку «Документы» из оболочки приложения, а затем загрузить и сохранить ее в этой версии.

Получение папки «Документы»:

NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
;
filePath = [filePath stringByAppendingPathComponent:@"States.plist"];
[self.statesData writeToFile:path atomically:YES];

Загрузка файла изобертка приложения, которую вы уже делаете;Копирование может быть сделано легко, используя NSFileManager.Вы можете восстановить временный массив и заменить ключ из вашего StatesData перед сохранением.Альтернативная команда чтения может быть:

self.statesData = [NSArray arrayWithContentsOfFile:filePath];
2 голосов
/ 07 октября 2011

Вы не можете написать пакет приложения, вам нужно записать его в каталог документов приложения.

Пример кода:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

BOOL status = [array writeToFile:filePath atomically:YES];

Если при первом запуске у вас есть начальный папа в комплекте приложений, скопируйте его в каталог «Документы» и сделайте все дальнейшие обращения к каталогу «Документы».

0 голосов
/ 09 июня 2016

SWIFT версия кода @ zaph выше:

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDirectory = paths[0]
let filePath = NSURL(fileURLWithPath: documentsDirectory, isDirectory: true).URLByAppendingPathComponent(fileName)
let status = items.writeToFile(filePath.absoluteString, atomically: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...