2016-07-23 26 views
0

Ich verwende Firebase für meine Daten und verwende Persistenz, um die Offline-Anzeige dieser Daten zu ermöglichen. Meine App befindet sich noch in der Beta-Phase, daher finde ich immer noch Bugs, die die App zum Absturz bringen und reparieren, aber wenn ich ein neues Update drücke, stürzt die App immer noch ab, bis ich die App lösche und eine neue Version neu installiere. Zum Beispiel habe ich eine Liste von Benutzern. Wenn sich ein Benutzer für die App anmeldet und dieser falsch in der Datenbank eingegeben wird, funktioniert der Rest der App gut, aber nur das Benutzermenü, in dem der Benutzer alle Benutzer abstürzt, wird angezeigt. Also behebe ich den Fehler und schiebe eine neue Version auf TestFlight, aber die Benutzeransicht stürzt immer noch ab, obwohl ich das Problem behoben habe. Es ist nicht, bis ich die App lösche und neu installiere, dass es funktioniert.Persistente Daten führen immer noch zum Absturz der App, auch nach dem Update der App.

Ich weiß, dies ist aufgrund meiner Persistenz eingeschaltet, aber gibt es eine Möglichkeit, programmatisch zu löschen, was im Speicher nur ist, wenn eine neue Version der App installiert ist? Ich möchte nicht allen meinen Testern sagen müssen, dass sie jedes Mal, wenn ein Fehler auftritt, löschen und neu installieren müssen, wenn ich nicht muss.

Antwort

0

Es klingt wie Sie die Datenbank/Inhaltsstruktur in der neuen Version geändert haben. Das Lesen/Schreiben in die alte (persistente) Datenbank/Inhalt ist fehlgeschlagen. Normalerweise müssen Sie Migrationsregeln definieren, die Ihre Datenbank/Inhalt von einer alten Version in eine neue Version konvertieren, damit Sie sie nach dem Update ohne Probleme verwenden können. Ich kenne Firebase nicht, also kann ich dir nicht helfen.

Eine andere Alternative besteht darin, die persistenten Daten zu entfernen, wenn Sie eine inkompatible neue Version haben und direkt nach dem Update mit einer Bereinigung beginnen. Unter der Annahme, dass die bereits gestartete App die Version 1.0.0 hat, können Sie so etwas früh in Ihrem App-Fluss tun:

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]; 
}