Application crashes when inserting data into master data. The database will contain over 500 entries. Check the condition first if messageId does not exit the database, and then insert the record into the database. But the app crash on
BOOL isExist = [context countForFetchRequest: request error: & error];
with the error Collection <__ NSCFSet: 0x16f601c0> was mutated during enumeration. ''
appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = appDelegate.managedObjectContext;
__block NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
__block NSManagedObjectContext *writerObjectContext = appDelegate.writerManagedObjectContext;
__block NSManagedObjectContext *temporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
temporaryContext.parentContext = managedObjectContext;
[temporaryContext performBlockAndWait:^{
NSError *error;
for (StreamData *stream in streamData) {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:DB_TABLE_STREAM];
[request setPredicate:[NSPredicate predicateWithFormat:@"stream_id = %@", stream.messageId]];
[request setFetchLimit:1];
BOOL isExist = [context countForFetchRequest:request error:&error];
if (!isExist) {
CF_Stream *object = [NSEntityDescription insertNewObjectForEntityForName:DB_TABLE_STREAM inManagedObjectContext:context];
[object setStream_id:[NSNumber numberWithLongLong:[stream.messageId longLongValue]]];
[object setType:stream.streamType];
[object setTime_stamp:[[DateTimeManager sharedInstances] getStreamDate:stream.streamTime]];
}
if (![temporaryContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
if (![temporaryContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[managedObjectContext performBlock:^{
NSError *error = nil;
if (![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[writerObjectContext performBlock:^{
NSError *error = nil;
if (![writerObjectContext save:&error]) {
completionBlock(NO);
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
} else {
completionBlock(YES);
}
}];
}];
}];
source
share