копирование списка в каталог документов - PullRequest
3 голосов
/ 08 октября 2011

Как мне скопировать существующий plist, который у меня есть в сборке приложения, в каталог Document?

Мой plist - это в основном массив словаря, я успешно скопировал plist в каталог, используя следующее:

 BOOL success;
            NSError *error;

            NSFileManager *fileManager = [NSFileManager defaultManager];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"States.plist"];

            success = [fileManager fileExistsAtPath:filePath];
            if (success) return;

            NSString *path = [[NSBundle mainBundle] pathForResource:@"States" ofType:@"plist"];    
            success = [fileManager copyItemAtPath:path toPath:filePath error:&error];

            if (!success) {
                NSAssert1(0, @"Failed to copy Plist. Error %@", [error localizedDescription]);
            } 

Однако, когда я пытаюсь получить доступ к NSDictionary, он дает мне:

CoreAnimation: ignoring exception: -[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object

Почему это так?Я должен снова запустить приложение, и теперь я могу изменить словарь, хранящийся в моем массиве

Ответы [ 2 ]

5 голосов
/ 19 декабря 2012

Так я копирую файл * .plist в папку документов. Надеюсь, это поможет.

+ (NSString*) getPlistPath:(NSString*) filename{
    //Search for standard documents using NSSearchPathForDirectoriesInDomains
    //First Param = Searching the documents directory
    //Second Param = Searching the Users directory and not the System
    //Expand any tildes and identify home directories.
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    return [documentsDir stringByAppendingPathComponent:filename];
}
+ (void) copyPlistFileToDocument{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath = [Utilities getPlistPath:@"AppStatus.plist"];
    if( ![fileManager fileExistsAtPath:dbPath])
    {
        NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"AppStatus" ofType:@"plist"];
            BOOL copyResult = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
            if(!copyResult)
                    NSAssert1(0, @"Failed to create writable plist file with message '%@'.", [error localizedDescription]);
    }

}
0 голосов
/ 08 октября 2011

Просто создайте новый pList в каталоге документов и установите содержимое имеющегося у вас plist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...