Экземпляры NSManagedObjectID безопасны для совместного использования через границы потоков.Однако ваш вызов mainContext objectWithID: получит реальный объект, который не является потокобезопасным.
Что вам, вероятно, следует сделать, это обернуть это в селектор или блок, который может быть выполнен в главной очереди.
dispatch_async(dispatch_get_main_queue(), ^{
NSManagedObjectContext *mainContext = [[[UIApplication sharedApplication] delegate] managedObjectContext];
NSManagedObject *obj = [mainContext objectWithID:objectID];
if (obj) {
[mainContext deleteObject:obj];
}
})
В качестве альтернативы вы можете сделать так, чтобы ваша очередь основного потока сделала это для вас:
[mainContext performBlock:^{
NSManagedObject *obj = [mainContext objectWithID:objectID];
if (obj) {
[mainContext deleteObject:obj];
}
}]
Конечно, все это порождает вопрос, почему вы пытаетесь удалить объекты в главном потокеконтекст из экземпляра NSOperation в другом потоке?