Hallo zusammen,
ich versuche mich momentan das erste mal an Backgroundthread und Multithread in Verbindung mit Core Data.
Ich habe nun den Fall, dass der ganze Einleseprozess im Background ablaufen soll.
Da die Werte gleichzeitig auch noch verschlüsselt werden sollen, möchte ich Multithreading nutzen.
Hier einmal ein Beispiel:
Alles anzeigen
Es kommt dann häufig beim Einlesen zu diesem Fehler:
Was mache ich falsch bzw. muss ich noch beachten?
Vielen Dank schon einmal im voraus für eure Hilfe.
ich versuche mich momentan das erste mal an Backgroundthread und Multithread in Verbindung mit Core Data.
Ich habe nun den Fall, dass der ganze Einleseprozess im Background ablaufen soll.
Da die Werte gleichzeitig auch noch verschlüsselt werden sollen, möchte ich Multithreading nutzen.
Hier einmal ein Beispiel:
Quellcode
- localContext = [NSManagedObjectContext contextForCurrentThread];
- dispatch_queue_t bg_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- dispatch_async(bg_queue, ^{
- //Ausstattungslinie
- dispatch_apply([d_stammdaten[@"Ausstattungslinie"][@"ID"] count], bg_queue, ^(size_t i) {
- CD_Ausstattungslinie *ausstattungslinie = [CD_Ausstattungslinie createInContext:localContext];
- ausstattungslinie.id_index = [Verschluesselung encryptData:d_stammdaten[@"Ausstattungslinie"][@"ID"][i] setPasswort:encryptPass];
- ausstattungslinie.id_marke = [Verschluesselung encryptData:d_stammdaten[@"Ausstattungslinie"][@"Marke_ID"][i] setPasswort:encryptPass];
- ausstattungslinie.s_name = [Verschluesselung encryptData:d_stammdaten[@"Ausstattungslinie"][@"Name"][i] setPasswort:encryptPass];
- });
- //Fahrzeugart
- dispatch_apply([d_stammdaten[@"Fahrzeugart"][@"ID"] count], bg_queue, ^(size_t i) {
- CD_Fahrzeugart *fahrzeugart = [CD_Fahrzeugart createInContext:localContext];
- fahrzeugart.id_index = [Verschluesselung encryptData:d_stammdaten[@"Fahrzeugart"][@"ID"][i] setPasswort:encryptPass];
- fahrzeugart.s_name = [Verschluesselung encryptData:d_stammdaten[@"Fahrzeugart"][@"Name"][i] setPasswort:encryptPass];
- });
- //Fahrzeugbereich
- dispatch_apply([d_stammdaten[@"Fahrzeugbereich"][@"ID"] count], bg_queue, ^(size_t i) {
- CD_Fahrzeugbereich *fahrzeugbereich = [CD_Fahrzeugbereich createInContext:localContext];
- fahrzeugbereich.id_index = [Verschluesselung encryptData:d_stammdaten[@"Fahrzeugbereich"][@"ID"][i] setPasswort:encryptPass];
- fahrzeugbereich.s_name = [Verschluesselung encryptData:d_stammdaten[@"Fahrzeugbereich"][@"Name"][i] setPasswort:encryptPass];
- });
- //Fahrzeugherkunft
- dispatch_apply([d_stammdaten[@"Fahrzeugherkunft"][@"ID"] count], bg_queue, ^(size_t i) {
- CD_Fahrzeugherkunft *fahrzeugherkunft = [CD_Fahrzeugherkunft createInContext:localContext];
- fahrzeugherkunft.id_index = [Verschluesselung encryptData:d_stammdaten[@"Fahrzeugherkunft"][@"ID"][i] setPasswort:encryptPass];
- fahrzeugherkunft.s_name = [Verschluesselung encryptData:d_stammdaten[@"Fahrzeugherkunft"][@"Name"][i] setPasswort:encryptPass];
- });
- dispatch_async(dispatch_get_main_queue(), ^{
- //Speichern
- [localContext saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
- NSLog(@"Saved the database changes");
- }];
- });
- });
Es kommt dann häufig beim Einlesen zu diesem Fehler:
2014-05-14 08:40:28.507 twoSalesII[2791:1803] Esprit
2014-05-14 08:40:28.592 twoSalesII[2791:60b] CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. -[__NSCFSet addObject:]: attempt to insert nil with userInfo (null)
Was mache ich falsch bzw. muss ich noch beachten?
Vielen Dank schon einmal im voraus für eure Hilfe.