Я перевожу наше приложение только для чтения в каталог поддержки приложений, чтобы обновления содержимого могли также обновлять его (по проводным обновлениям, а не обновлениям приложений).Приведенный ниже код находится в делегате приложения для копирования через базу данных, однако при первом запуске NSFileManager в следующих попытках (во время этого запуска), чтобы увидеть, есть ли он или загрузить, он не видит скопированный файл.Тем не менее, он копирует его, потому что, если я закрою приложение и перезапустить его, все работает нормально.Я в растерянности.
NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
NSError *err = nil;
NSURL *ASD = [fm URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&err];
if (!err) {
NSURL* path = [NSURL URLWithString:DATABASE_NAME relativeToURL:ASD];
NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"datafiles/data_main" ofType:@"sqlite"];
if ([fm fileExistsAtPath:[path path]]) {
if([DatabaseManager isBundledDBNewerThenInUse]){
NSLog(@"bundled db is newer");
[DatabaseManager close];
[fm removeItemAtURL:path error:&err];
if (err) {
NSLog(@"Error deleting old DB:%@",err);
}
else {
[fm copyItemAtPath:bundle toPath:[path path] error:&err];
if (err) {
NSLog(@"Error in copying over DB:%@",err);
}
else
{
NSLog(@"db should have been copied over correctly");
}
}
}
}
else{
[fm copyItemAtPath:bundle toPath:[path path] error:&err];
if (err) {
NSLog(@"Error in copying over DB:%@",err);
}
}
}
else
{
NSLog(@"Error in opening AS for DB copy:%@",err);
}
"[DatabaseManager isBundledDBNewerThenInUse]" возвращает YES, если БД в каталоге поддержки приложений либо отсутствует, либо имеет версию, которая старше, чем версия в комплекте,Он открывает базу данных в каталоге поддержки приложений, поэтому [DatabaseManager close], прежде чем пытаться удалить его.Я использую FMDB в моем DatabaseManager, если это вообще помогает.Но, как я сказал после этой начальной загрузки, если вы убьете приложение и вернетесь в него, оно будет работать отлично.(При обновлении базы данных из комплекта вы также не обновляете базу данных при первой загрузке.) Любая помощь будет отличной, и если вам нужна дополнительная информация, просто спросите!Спасибо!