2016-07-23 19 views
0

私は自分のデータにFirebaseを使用し、永続性を使用してそのデータをオフラインで表示できます。私のアプリはまだベータ版ですので、アプリをクラッシュさせて修正するバグを見つけていますが、新しいアップデートをプッシュすると、アプリを削除して新しいバージョンを再インストールするまでアプリがクラッシュします。たとえば、私はユーザーのリストを持っています。ユーザーがアプリケーションにサインアップしてデータベースに間違って入力された場合、アプリケーションの残りの部分は正常に機能しますが、ユーザーがすべてのユーザーを見ることができるユーザーメニューがクラッシュします。だから私は、エラーを修正し、TestFlight上の新しいバージョンを押し出すが、私は問題を修正したにもかかわらず、ユーザーのクラッシュが表示されます。それは私がアプリを削除し、それが動作するように再インストールするまでではない。アプリケーションの更新後でもアプリケーションがクラッシュするという永続的なデータ

これは私の永続性がオンになっていることがわかっていますが、プログラムの新しいバージョンがインストールされている場合にのみメモリ内にあるものをプログラムでクリアする方法はありますか?私は、私のテスターのすべてに、私がする必要がなければバグが出てくるたびに削除して再インストールするよう伝える必要はありません。

答えて

0

新しいバージョンのデータベース/コンテンツ構造を変更したようです。したがって、古い(持続された)データベース/コンテンツへの読み書きは失敗しました。通常、データベース/コンテンツを古いバージョンから新しいバージョンに変換する移行ルールを定義する必要があるため、問題なく更新後に使用できます。私はFirebaseを知らないので、それを手伝ってはいけません。

もう1つの方法は、互換性のない新しいバージョンがあり、更新の直後にクリーンアップを開始するたびに永続データを削除することです。すでに起動されているアプリのバージョンが1.0.0であれば、アプリフローの早い段階でそのようなことをすることができます:

NSString *lastKnownVersion = [[NSUserDefaults standardUserDefaults] stringForKey:@"LastKnownAppVersion"]; 
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] 
if (!lastKnownVersion || [currentVersion compare:newVersion options:NSNumericSearch]==NSOrderedAscending) { 
    if (!lastKnownVersion) { 
     // first start after update from version 1.0.0 (or lower) to a larger version 
     // cleanup code here 
    } else if ([lastKnownVersion compare:@"2.0.0" options:NSNumericSearch]==NSOrderedAscending) { 
     // first start after update from version 1.0.1 up to 2.0.0 to a larger version 
     // cleanup code here 
    } // ... add more versions that need a legacy handling 
    [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"LastKnownAppVersion"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
関連する問題