2013-12-12 6 views
12

Wie finde ich die Ersatzmethode in MagicalRecord für diese (die veraltet ist)? Ich habe Google, SO und die Dokumente angeschaut. Nichts scheint ein Ersatz zu sein, und natürlich sagt nichts in den Dokumenten, was die veraltete Methode ersetzt hat. : - {Was ist die Ersatzmethode für diesen veralteten Aufruf von MagicalRecord?

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveErrorHandler:^(NSError *error) 

Antwort

23

Die veraltete Methode in Frage:

[NSManagedObjectContext MR_contextForCurrentThread] 

ich ein wenig blog post darüber vor einiger Zeit geschrieben hätte, obwohl ich es auf meinem persönlichen Blog gebe zu, und in keinem offizielle Dokumente Aber, TL; DR, die Quintessenz ist, in der Welt von GCD und Warteschlangen können Sie nicht garantieren, dass eine Warteschlange auf einen Thread abgebildet wird, obwohl GCD auf Threads ausgeführt wird. Die Art und Weise, dass die Dinge funktionieren für die Zukunft ist für Sie das folgende Muster verwenden:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
    //make your changes in the localContext 
}]; 

Dies löst die feinen Querfaden Probleme, die auftauchen, in contextForCurrentThread, indem Sie einfach die Regel durchzusetzen, die Sie alle Arbeiten in einem anderen tun sollten Thread in einem Thread-spezifischen Kontext. Indem Sie bei jedem Speichern einen neuen Kontext erstellen und den Kontext nicht erneut verwenden, garantieren Sie, dass Sie keine Threads überschreiten und Ihre App nicht in 1% der Fälle abstürzen.

+1

So Was ersetze ich ** MR_saveErrorHandler: ** mit? – SpokaneDude

+0

Jeder der folgenden: MR_saveOnlySelfAndWait, MR_saveOnlySelfCompletion :, MR_saveToPersistentStoreAndWait, MR_saveToPersistentStoreCompletion: – casademora

+0

Vielen Dank ... zu einem anderen Thema, ich mag Dokumente in einem PDF lesen ... würden Sie sich für mich interessieren, ein PDF des aktuellen zu erstellen Dateien im Ordner Docs? Ich würde es gerne sozusagen "auszahlen" ..: D – SpokaneDude

1

casademora ist richtig, aber ich werde versuchen, um genauer zu sein, weil ich einige Probleme auftreten, wenn mein

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil]; 

in

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) 

Sie vorsichtig sein müssen, um die Umstellung auf Ihre Entitäten ändern oder erstellen innerhalb des Blocks, aber es ist nicht genug.

Um Ihre Entitäten abzurufen, müssen Sie auch eine Auswahlanforderung mit Kontext verwenden.

MR_findFirstByAttribute:withValue 

ist nicht genug und Updates werden nicht gespeichert. Sie müssen stattdessen

MR_findFirstByAttribute:withValue:InContext:localContext 

verwenden Und als Einheit zu schaffen, ist es die gleiche

MR_createEntity 

muss Veränderung seiner

MR_createEntityInContext:localContext 

Dann funktioniert es wie ein Zauber :)

Verwandte Themen