2014-02-16 6 views
0

Я использую этот код для чтения данных из локального (в проекте XCode) файла .plist.Как получить новые данные .plist

NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"GameData.plist"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if (![fileManager fileExistsAtPath: path]) 
    { 
     NSString *bundle = [[NSBundle mainBundle] pathForResource:@"GameData" ofType:@"plist"]; 

     [fileManager copyItemAtPath:bundle toPath: path error:&error]; 
    } 

    gameData = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

И это работало большое начало, но теперь я нахожу, когда я пошагово код в симуляторе, что моя игра использует версию .plist файла, который существовал в самом начале, и новые поля Я установил в своем новом файле GameData.plist, который не появляется.

Я полагаю, это потому, что он не получает данные снова, если файл уже существует? но как я могу получить новую версию файла .plist? Я попытался удалить оператор if, но я получаю ошибку времени выполнения, когда файл уже существует.

+0

Проверьте возвращаемое значение 'copyItemAtPath: error:'. Если он возвращает 'NO', log' error'. – rmaddy

+0

Я оставлю всю строку, но она содержит эту «ошибку какао 516.» и «Операция не может быть завершена. Файл существует», это отображается в строке copyItemAtPath. – Phil

+0

Это не имеет смысла. Вы проверяете, существует ли он, и пытайтесь копировать, если он не существует. Поэтому вы не должны получать ошибку о существующем файле. – rmaddy

ответ

0

Похоже, вам нужно настроить систему версий. Но единственная причина для копирования файла из пакета в папку документов - это вы можете отредактировать его, поэтому вам нужно подумать о том, как объединить обновленный файл в комплекте и добавления пользователей в папку документов.

После того, как вы планируете слияние файлов, вы можете изменить свой оператор if, чтобы он не просто проверял, существует ли файл (если это так, его нужно удалить, прежде чем вы сможете его заменить), но также рассматривает версию. Вы можете сохранить текущий скопированный номер версии в настройках по умолчанию пользователя и добавить номер версии в файл в комплекте. Вы также можете сохранить измененные пользователем данные в другом файле и использовать их как переопределяющие.

+0

Спасибо, но все, что я пытаюсь сделать, это захватить данные из файла .plist, чтобы установить мою игру, вот и все, конечно, я меняю время от времени данные .plist, и мне нужна игра, чтобы загрузить новый обновленный файл .plist, вот и все :) – Phil

+0

Зачем копировать его? Просто прочитайте plist in from bundle ... – Wain

+0

Но разве это не читается из папки документов? gameData = [[NSMutableDictionary alloc] initWithContentsOfFile: путь]; ? потому что если это не сработает, я все равно получаю старую версию. – Phil

Смежные вопросы