Включение файлов в путь библиотеки пакетов iPhone

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

Поскольку удалить что-либо из [[NSBundle mainBundle] невозможно, Мне нужно найти лучший способ сделать это. Если бы я мог включить файл обновления в путь к библиотеке приложения, это было бы намного проще.

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

Кто-нибудь может мне помочь? вот что у меня есть:

if ([self checkUpdateFile] == YES) {
    [self applyUpdate];
}

-(BOOL)checkUpdateFile {
NSString *updateFilePath = [[NSBundle mainBundle]pathForResource:@"updateData"
        ofType:@"dat" inDirectory:@"update"];
BOOL updateFileExists = [[NSFileManager defaultManager]
        fileExistsAtPath: updateFilePath];
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
        NSUserDomainMask, YES) objectAtIndex:0];
NSString *programDataPath = [libraryPath stringByAppendingPathComponent: 
        @"programData.dat"];
BOOL programFileExists = [[NSFileManager defaultManager]fileExistsAtPath: 
        programDataPath];
if (programFileExists == YES && updateFileExists == YES) {
    NSLog(@"Update File is present, and so is a data file, so this is a previous install");
    return YES;
} else {
    NSLog(@"This is not an upgradeable version.");
    if (updateFileExists == YES) {
        NSLog(@"The update file is here but this is the first install.");
        [[NSFileManager defaultManager]removeItemAtPath: updateFilePath 
                        error:NULL];
        BOOL doesFileStillExist = [[NSFileManager defaultManager] 
                        fileExistsAtPath:updateFilePath];
        if (doesFileStillExist == YES) {
            NSLog(@"File still exists");
        } else {
            NSLog(@"File was deleted.");
        }
    }
    return NO;
}
}

-(void)applyUpdate {
NSLog(@"Applying Update");
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"updateData" 
        ofType:@"dat" inDirectory:@"update"];
NSData *programData = [[NSData alloc] initWithContentsOfFile:filePath];
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] 
        initForReadingWithData:programData];
NSMutableArray *characterList = [[decoder 
        decodeObjectForKey:@"characterList"]retain];
int i = 0;
for (Character *player in characterList) {
    NSMutableArray *movesList = player.moves;
    Character *existingCharacter = [self.dataController.characterList 
                objectAtIndex:i];
    NSLog(@"Found Character: %@",existingCharacter.name);
    existingCharacter.moves = movesList;
    i++;
}

BOOL doesFileStillExist = [[NSFileManager defaultManager] 
         fileExistsAtPath:filePath];
if (doesFileStillExist == YES) {
    NSLog(@"File still exists");
} else {
    NSLog(@"File was deleted.");
}
[self writeDataToDisk];
[characterList release];
[decoder release];
[programData release];

}
1
задан Stefan Arentz 12 September 2010 в 17:30
поделиться