situation telle qu'elle devrait être
iOS - Extension Aujourd'hui, un widget dégagé au fil du temps
Nous avons un widget qui affiche aujourd'hui un maximum de 6 boutons en fonction des données définies dans l'application correspondante. Ces données sont partagées à l'aide de groupes d'applications. Si au moins un bouton est configuré, il apparaîtra comme indiqué sur l'image ci-dessus. Si l'utilisateur n'est pas connecté ou si aucun bouton n'est configuré, il affichera un message comme indiqué dans l'image ci-dessous.
Problème
Après plusieurs heures (quelque part entre 4 et 7) de ne pas avoir ouvert l'application, le widget revient au « Pas de boutons configurés » vue.
analyse jusqu'à présent
La façon dont les données sont chargées de l'application-groupe est effectuée en utilisant le code comme indiqué ci-dessous. (gist for full code) De la façon dont je l'avais écrit, la seule façon d'afficher la vue 'Aucun bouton configuré' est si le tableau buttons
existe réellement mais a une longueur de zéro.
Je me attendais quelque chose comme une compensation de cache ou d'un arrêt de service d'arrière-plan, mais pour autant que je peux voir, les exceptions doivent être pris plus tôt:
- Si aucune connexion n'a pu être apportée aux données du groupe d'applications,
userDefaults
devrait être nul, il devrait donc afficher la vue 'Non connecté'. - Dans le cas où les boutons ont jamais été définis,
buttons
devrait être nul et donc à nouveau, il doit montrer le « Non connecté View »
Compte tenu de l'application ne fait rien en arrière-plan, l'application elle-même ne pouvait pas être en train de changer les boutons.
J'ai essayé de reproduire ceci tout en ayant le débogueur connecté, mais le problème ne se reproduira pas.
Est-ce que quelqu'un a même la moindre idée sur la façon de résoudre ce problème ou comment débuter le débogage?
fichiers pertinents:
Code pertinent:
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
}
Est-ce dans Swift 2 ??? – Coder256
Oui, malheureusement en raison de dépendances sur les plugins tiers, nous sommes toujours liés à Swift 2.3 –
Quels plugins? Aussi, pourriez-vous s'il vous plaît fournir les fonctions pour 'drawButton' et' colorFromName'? – Coder256