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 einfetchBatchSize
wird 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