Situation geklärt, wie es
iOS - Heute Erweiterung Widget über die Zeit
sollten wir heute eine Widget haben, die ein Maximum von 6 Tasten auf Daten abhängig zeigt in der entsprechenden App eingestellt. Diese Daten werden mit App-Gruppen geteilt. Wenn mindestens eine Schaltfläche konfiguriert ist, wird sie wie in der Abbildung oben angezeigt. Wenn der Benutzer nicht angemeldet ist oder keine Tasten konfiguriert sind, wird eine Nachricht angezeigt, wie im Bild unten gezeigt.
Problem
Nach mehreren Stunden (irgendwo zwischen 4 und 7) nicht die Anwendung geöffnet hat, das Widget kehrt zu der Ansicht 'Keine Tasten konfiguriert'.
Analyse bisher
Die Art und Weise die Daten aus dem App-Gruppe geladen ist, wird der Code erfolgt wie unten gezeigt. (gist for full code) In der Art, wie ich es geschrieben hatte, ist die Ansicht "Keine Schaltflächen konfiguriert" nur dann sichtbar, wenn das Array buttons
tatsächlich existiert, aber eine Länge von Null hat.
ich erwartet hatte so etwas wie eine Cache-Bereinigung oder Hintergrunddienst Anhalten, aber soweit ich sehen kann, sollten Ausnahmen früher gefangen werden:
- keine Verbindung zu den App-Gruppendaten vorgenommen werden, könnte Wenn
userDefaults
sollte null sein, also sollte es die 'Nicht eingeloggte Ansicht' anzeigen. - Falls die Tasten nie definiert wurden,
buttons
sollte Null sein und so wieder soll es die ‚Nicht angemeldet Ansicht‘
Betrachtet man die App tut nichts im Hintergrund zeigen, die App selbst nicht zu ändern könnte die Knöpfe.
Ich habe versucht, dies zu reproduzieren, während der Debugger angeschlossen ist, aber das Problem wird nicht reproduzieren.
Hat jemand überhaupt die geringste Idee, wie Sie dieses Problem beheben können oder wie Sie mit dem Debuggen beginnen?
Relevante Dateien:
Relevante Code:
private struct sharedData {
static var baseUrl: String?
static var token: String?
static var phoneDeviceId: String?
static var buttons: Array<Button>?
}
func loadData() {
let groupIdentifier = "group." + NSBundle.mainBundle().bundleIdentifier!
var groupIdArray = groupIdentifier.componentsSeparatedByString(".")
groupIdArray.removeAtIndex(groupIdArray.count - 1)
let appGroupIdentifier = groupIdArray.joinWithSeparator(".");
let userDefaults = NSUserDefaults.init(suiteName: appGroupIdentifier)
if (userDefaults == nil) {
print("Error in user defaults")
setButtonTitle("Not logged in. Open Triggi to continue.")
return false
}
sharedData.baseUrl = userDefaults?.valueForKey("baseUrl") as? String
sharedData.token = userDefaults?.valueForKey("token") as? String
sharedData.phoneDeviceId = userDefaults?.valueForKey("phoneDeviceId") as? String
let buttons = userDefaults?.valueForKey("buttons") as? NSArray
if (sharedData.baseUrl == nil || sharedData.token == nil || sharedData.phoneDeviceId == nil || buttons == nil) {
print("Missing data")
setButtonTitle("Not logged in. Open Triggi to continue.")
return false
}
if (buttons?.count == 0) {
print("No buttons configured")
setButtonTitle("No buttons configured. Open Triggi to continue.")
return false;
}
// More things are done with the data here
}
Ist dies in Swift 2 ??? – Coder256
Ja, leider aufgrund von Abhängigkeiten von Drittanbieter-Plugins, wir sind immer noch an Swift gebunden 2.3 –
Welche Plugins? Könnten Sie bitte auch die Funktionen 'drawButton' und' colorFromName' angeben? – Coder256