Ausführung von Core Data speichern auf einem hintergrund-thread?

Habe ich eine Schaltfläche, die markiert einen ausgewählten Eintrag in einem Core Data, SQLite als "Favorit", das heißt, ich bin nur umlegen eines BOOL für diesen index von off auf on stellen.

Derzeit, wenn ich dieses, ich nenne save auf die managedObjectContext nimmt, die vielleicht 500ms, vielleicht ein wenig mehr, nach Instrumenten.

Ich habe einige code, der ausgeführt wird, zur gleichen Zeit, die Trigger eine nette kleine Teilchen-explosion ("Hurra, ein Favorit!"), aber ich laufen in ein Problem, wo die explosion verzögert wird, bis nach der save abgeschlossen hat.

Ich bin mir nicht sicher, warum, da der code zum auslösen der explosion ist vor der save nennen. Ich bin ein relativ neuer Programmierer also vielleicht bin ich etwas fehlt, aber nicht die code Zeile für Zeile auszuführen, in einem Fall wie diesem, in der die explosion auslösen würde, dann sparen Sie auftreten würde, während es stattfindet? Der Delegat-Aufruf, hier kann man sich etwas Zeit nimmt zu, aber die gleiche Frage gilt, warum wäre es wichtig, wenn es nach diesen Zeilen code?

EDIT: Bin ich zu Recht sagen, dass der main-thread blockiert wird, bevor die Partikel angezeigt werden, indem Sie die folgenden Zeilen von code, d.h. die UI kann sich nicht selbst aktualisieren?

Hier ist mein code:

//Particle animation
LikeExplosion *likeExplosionView = [[LikeExplosion alloc] initWithFrame: CGRectMake(0, 0, 320, 400)];
[likeExplosionView setUserInteractionEnabled: NO];
[self.view addSubview: likeExplosionView];
[self.view bringSubviewToFront: likeExplosionView];
[likeExplosionView decayOverTime: 1.1];

//Delegate call to reload tableview elsewhere
[self.delegate detailViewControllerDidLikeLine];

//Update current object
[_selectedLine setIsLiked: [NSNumber numberWithBool: YES]];
[_selectedLine setIsDisliked: [NSNumber numberWithBool: NO]];

//Update context
NSError *error;
if (![[[CDManager sharedManager] managedObjectContext] save:&error]) NSLog(@"Saving changes failed: %@, %@", error, [error userInfo]);

Erste Frage: warum gibt es eine Verzögerung, wenn ich den Aufruf der animation erste code in der Methode?

Zweite Frage: würde, setzen die save Anruf auf einem hintergrund-thread, der das problem lösen, und ist es auch sicher /ein gute Idee dies zu tun?

Wahrscheinlich waren Sie auf einem hintergrund-thread. Versuchen, rufen Sie Ihre Partikel-animation auf dem Haupt-thread.
Ich habe kein threading in der app auf alle derzeit definitiv nicht auf einem hintergrund-thread.

InformationsquelleAutor Luke | 2013-04-10

Schreibe einen Kommentar