Speichern und Laden von Daten auf Heute Erweiterungen (iOS 8)
Ist es möglich, speichern und laden von Daten auf Heute Erweiterung mit NSUserDefaults?
Nach dem schließen des Notification Center das widget verhält sich wie eine app, die beendet ist, also alle Daten verloren. Wie könnte ich dieses Problem lösen?
Dies ist mein code:
NSUserDefaults *defaults;
- (void)viewDidLoad {
[super viewDidLoad];
defaults = [NSUserDefaults standardUserDefaults];
NSArray *loadStrings = [defaults stringArrayForKey:@"savedStrings"];
if ([loadStrings objectAtIndex:0] != nil) {
[display setText:[NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:0]]];
}
if ([loadStrings objectAtIndex:1] != nil) {
calculatorMemory = [NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:1]].doubleValue;
}
}
- (IBAction)saveData:(id)sender {
NSString *displayString;
NSString *memoryString;
NSArray *saveStrings = [[NSArray alloc] initWithObjects: displayString, memoryString, nil];
defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:saveStrings forKey:@"savedStrings"];
[defaults synchronize];
}
- möglich, Duplikat der Kommunikation und beibehalten von Daten zwischen apps mit App-Gruppen
InformationsquelleAutor Massimo Piazza | 2014-06-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Verwendung von app-Gruppen-id anstelle von com.*
Zum Beispiel:
Vergessen Sie nicht zu synchronisieren wenn Sie Daten speichern
Müssen Sie den App-Gruppe Zeug detaillierte unter hier und wenn es dann tatsächlich geklappt (ziemlich flaues unter beta -) es sollte Ihnen erlaubt zu teilen NSUserDefault Daten wie normal zwischen den host-und widget.
Edit: Normal NSUserDefaults nicht Arbeit. Apple implementiert hat, eine neue Methode. Um zu verwenden, einfach neu definieren, Ihre NSUserDefaults-Instanz wie folgt:
Für jedermann fragt sich, wie in der Welt tun Sie sparen und erhalten Sie Werte, dann schauen Sie auf den code.
Regelmäßig In Ihrem app hinzufügen, diese zu retten, was du gerne in deiner *.m-Datei.
In Ihre "heute" - widget unter TodayViewController.m in viewDidLoad hinzufügen.
Benötigen Sie zuerst die App-Gruppen einzurichten, für die beide Ziele (application und Erweiterung).
Verwenden Sie dann die
erhalten Sie die Standardeinstellungen Objekt, das Sie Lesen aus/schreiben wie gewohnt.
Wenn Sie benachrichtigt werden möchten änderungen auf die Standardwerte zurückzusetzen, verwenden Sie die
NSUserDefaultsDidChangeNotification
in Ihrem widget (oder eine app).Für eine Schritt-für-Schritt-tutorial erklärt alle diese, nehmen Sie einen Blick auf diese blog-post.
NSUserDefaultsDidChangeNotification
s? Ich erhalte keine Benachrichtigungen und es scheint, dass andere Leute nicht, aber ich konnte keine offizielle Dokumentation also ich bin immer noch Fragen, wenn dies irgendwie möglich ist.NSUserDefaultsDidChangeNotification
Arbeit? Für mich ist es nicht so gut funktioniert. Kann ich überprüfen, dass Werte sich ändern von der Haupt-app zu die Erweiterung und ich habe es mit dem timer, die Trigger pro Sekunde. Aber die Benachrichtigungen nicht angezeigt, selbst wenn die Werte geändert wurde. Ich Gruppen verwende, benutze ichinitWithSuiteName
für user-defaults-initiation. Und ich kann Werte erreichen. So funktioniert alles außer der Benachrichtigung. Und ich füge hinzu notification center Beobachter für meine Verlängerung überaddObserver:selector:name:object:
mit Objekt-Wertnil
. Aber es funktioniert nicht.@edukulele
Heute Erweiterung und die Wichtigsten app läuft auf zwei Prozessen. Heute Erweiterung nicht empfangen kann NSUserDefaultsDidChangeNotifications. Ich habe versucht, verwenden Sie MMWormhole. Es ist sehr gut.