Re: Core Data concurrency during import of folder contents
Re: Core Data concurrency during import of folder contents
- Subject: Re: Core Data concurrency during import of folder contents
- From: Steve Mills <email@hidden>
- Date: Tue, 03 Feb 2015 00:48:20 -0600
On Feb 2, 2015, at 17:36:22, Roland King <email@hidden> wrote:
>
> get the NSManagedObjectContext the document creates for you with [ super managedObjectContext ], get the store coordinator with [ managedObjectContext persistentStoreCoordinator ], create your own MOCs on that store, hold on to the MOC you have just created, ignore the one super created (or perhaps you can nil it, not sure) and then return it.
That sounds interesting. I've tried it, and it causes my managedObjectContext override to be called twice during document creation. The 2nd call is caused by my managedObjectContext override calling [super managedObjectContext], and super tries to set up the undo manager for its managedObjectContext. I don't know if this is harmless or OK.
So since no exceptions are thrown during the creating of my own MOCs, I go ahead and add objects to a temp private MOC whose parent is my managedObjectContext. That works and my table view is populated after it completes. But when I try to save at the end of my concurrent object-adding block, it throws:
CoreData: error: Illegal attempt to save to a file that was never opened. "This NSPersistentStoreCoordinator has no persistent stores (unknown). It cannot perform a save operation.". No last error recorded.
An uncaught exception was raised
This NSPersistentStoreCoordinator has no persistent stores (unknown). It cannot perform a save operation.
(
0 CoreFoundation 0x00007fff8569b66c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff87dfd76e objc_exception_throw + 43
2 CoreData 0x00007fff898b7eb3 -[NSPersistentStoreCoordinator _coordinator_you_never_successfully_opened_the_database_so_saving_back_to_it_is_kinda_hard:] + 51
3 CoreData 0x00007fff898b810d -[NSPersistentStoreCoordinator _introspectLastErrorAndThrow] + 77
4 CoreData 0x00007fff898b8236 __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 166
5 CoreData 0x00007fff898c331b gutsOfBlockToNSPersistentStoreCoordinatorPerform + 171
6 libdispatch.dylib 0x0000000100025d43 _dispatch_client_callout + 8
7 libdispatch.dylib 0x00000001000270b1 _dispatch_barrier_sync_f_invoke + 348
8 CoreData 0x00007fff898b2312 _perform + 194
9 CoreData 0x00007fff89804395 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 533
10 CoreData 0x00007fff898043c4 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 580
11 CoreData 0x00007fff8982eb3b -[NSManagedObjectContext save:] + 1291
12 Image Chest 0x0000000100002291 -[Document unsafeSaveContext:] + 113
13 Image Chest 0x000000010000213a __24-[Document saveContext:]_block_invoke + 42
14 CoreData 0x00007fff8984a246 developerSubmittedBlockToNSManagedObjectContextPerform + 182
15 libdispatch.dylib 0x0000000100025d43 _dispatch_client_callout + 8
16 libdispatch.dylib 0x0000000100029fb3 _dispatch_queue_drain + 1804
17 libdispatch.dylib 0x000000010002bfc0 _dispatch_queue_invoke + 223
18 libdispatch.dylib 0x0000000100028f5e _dispatch_root_queue_drain + 666
19 libdispatch.dylib 0x000000010003acd0 _dispatch_worker_thread3 + 106
20 libsystem_pthread.dylib 0x00007fff92a82637 _pthread_wqthread + 729
21 libsystem_pthread.dylib 0x00007fff92a8040d start_wqthread + 13
)
The save model is based on Jerry's YaBT sample mentioned earlier in the thread, which has a rootContext (NSPrivateQueueConcurrencyType), mainContext (NSMainQueueConcurrencyType), and tempContext (NSPrivateQueueConcurrencyType) in a chain of children. I'm guessing it's because the document has not been saved to disk yet, whereas the YaBT sets up a file for the persistent store when it creates it. Since the document sets up the store, I don't know what I'd do in this case.
Ugh. This needs to be more complicated and harder to comprehend.
--
Steve Mills
Drummer, Mac geek
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden