2016-07-23 27 views
0

我正在使用Firebase处理我的数据并使用持久性来允许离线查看该数据。我的应用程序仍处于测试阶段,因此我仍然在发现会导致应用程序崩溃并修复它们的错误,但是当我推送新的更新时,应用程序仍会崩溃,直到我删除该应用程序并重新安装新版本。例如,我有一个用户列表。如果用户注册了应用程序,并且它在数据库中输入错误,则应用程序的其余部分可以正常工作,但用户菜单中用户可以看到所有用户崩溃。所以我解决了这个错误,并在TestFlight上推出了一个新版本,但即使我解决了这个问题,用户仍然会查看崩溃。直到我删除应用程序并重新安装它。即使在应用程序更新后,持续性数据仍会导致应用程序崩溃

我知道这是由于我打开了持久性,但有没有办法以编程方式清除内存中的内容,只有在安装新版本的应用程序时才有效?如果不需要,我不想告诉我的所有测试人员在每次出现错误时都要删除并重新安装。

回答

0

这听起来像你改变了新版本的数据库/内容结构。因此,读/写旧(持久)数据库/内容失败。通常情况下,您必须定义迁移规则,将数据库/内容从旧版本转换为新版本,以便在更新后可以毫无问题地使用它。我不知道Firebase,所以我无法帮助你。

另一种替代方法是在有不兼容的新版本时删除持久数据,并在更新后直接从清理开始。假设已经推出的应用程序的版本为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]; 
}