アプリ ストアに ios アプリがありますが、最新のアップグレードでユーザーのデータが失われました。このリリースでは、ユーザーの sqlite ファイルの場所を変更する必要がありました (長い話です)。元のファイルは \Documents\myApp.sqlite にありました。アップグレードしたら、\Documents\myAppDB.sqlite にコピーします。コードの大部分を以下に示します。ストアの URL は新しい場所を指し、legacyStoreURL は古い場所を指しています。
BOOL stillUsingLegacyStore = YES;
stillUsingLegacyStore = !([fileManager fileExistsAtPath:[[self storeURL] path]]);
if ([fileManager fileExistsAtPath:[[self legacyStoreURL] path]] && stillUsingLegacyStore==YES)
{
_store = [_coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:[self legacyStoreURL]
options:options
error:&error];
if (!_store)
{
FLOG(@"Error adding OLD persistent store to coordinator %@\n%@",
[error localizedDescription], [error userInfo]);
return;
}
_store = [_coordinator migratePersistentStore:_store
toURL:[self storeURL]
options:options
withType:NSSQLiteStoreType
error:&error];
if (!_store)
{
FLOG(@"Error adding OLD persistent store to coordinator %@\n%@",
[error localizedDescription], [error userInfo]);
return;
}
}
else
{
_store = [_coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:[self storeURL]
options:options
error:&error];
if (!_store)
{
NSLog(@"Failed to add store. Error: %@", error);abort();
return;
}
else
{
NSLog(@"Successfully added store: %@", _store);
}
}
自分のデバイスで問題を再現できません。元のファイルを削除しないことにしたので、ユーザーが古いファイルを復元できるようにアップグレードできることを願っています。ただし、これを試みる前に、問題を理解し、再現できるようにしたいと考えています。なぜこれがうまくいかなかったのか、なぜ再現できなかったのか、誰でも理解できますか?