Die Stapelgröße funktioniert nicht, wenn übergeordnete / untergeordnete Kontexte verwendet werden

Ich konnte dies in meiner Bewerbung bestätigen, und ich habe eine kurze Beispiel-Bewerbung erstellt, um dies zu bestätigen. Hier ist das Setup:

Sie haben zwei verwaltete Objektkontexte:

masterMOC: NSPrivateQueueConcurrencyType, tied to persistent store coordinator
mainMOC: NSMainQueueConcurrencyType, child of masterMOC, NOT tied to any store coordinator

Dieses Setup wurde von dem WWDC-Video inspiriert, das darauf hinweist, dass wir einen Hintergrund-Thread speichern können, indem Sie das festlegenmasterMOC in eine private Warteschlange und binden Sie es an den permanenten Speicher. Wenn Sie eineNSFetchedResultsController Verwendung dermainMOC (und es muss das seinmainMOC da dies derjenige ist, der an die Benutzeroberfläche gebunden ist), und setze einfetchBatchSizewird die Chargengröße nicht berücksichtigt und alle Entitäten werden sofort fehlerhaft. Ich habe die SQLite-Debug-Annotationen aktiviert und beim Scrollen durch Tausende von Zeilen (mit einer Stapelgröße von 20) wurden keine Fehler ausgelöst.

Wenn ich eine einfache Anpassung vornehme, binde ich nämlich den beständigen Geschäftskoordinator an denmainMOC und machen Sie es zu einem Stammkontext (das heißt, es ist kein untergeordnetes Element von master mehr), dann funktioniert die Stapelgröße einwandfrei, und wenn ich durch Tausende von Zeilen scrolle, werden mehrere Fehler ausgelöst.

Ist das erwartetes Verhalten? Vermisse ich etwas?

Sie können das Beispielprojekt herunterladenHier

Antworten auf die Frage(2)

Ihre Antwort auf die Frage