У меня проблемы с логикой обновления.Мне нужно включить файл в комплект приложения, который содержит конкретные данные обновления.Когда приложение обнаруживает этот файл, оно проверяет, является ли это первой установкой (обновление не требуется) или предыдущей установкой (применить обновление).Каким бы ни был результат, файл обновления необходимо удалить, чтобы он не был найден снова, иначе приложение будет применять обновление при каждом запуске приложения, что плохо.
Поскольку невозможно удалить что-либо из [[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];
}