Сбой приложения при сохранении в Core data
do {
try context.save() <----------- CRASH ---------
} catch {
print("Failed saving")
}
Я сохраняю данные в Core data в фоновом режиме, используя этот код
DispatchQueue.global(qos: .background).async {
// Fetches from database
DispatchQueue.main.async {
if fetchedActivitiesFromDB {
// Updates the view
} else {
// gets from the server
// Save the result in Core Data <------------
let coreData = CoreDataHelper()
coreData.saveInDB(fetchedItemsFromServer)
}
}
}
Согласно приведенному выше коду это можно сохранить в CoreDataодновременно.Я сделал несколько задач, чтобы решить проблему, но они не сработали.
Первое: Я хотел создать очередь для одновременного сохранения
let saveQueue = DispatchQueue(label: "start save in CoreData");
saveQueue.async {
DispatchQueue.global(qos: .background).async{
do {
try context.save()
} catch {
print("Failed saving")
}
}
}
Приведенный выше код не решил проблему.
Второй : CoreDataManager не был одноэлементным.Я подумал, что это проблема, поэтому я изменил ее на:
class CoreDataHelper {
static let sharedInstance = CoreDataHelper()
private init() {}
static func getInstance() -> CoreDataHelper {
return sharedInstance
}
//...
}
Третий : я изменил настройку стека CoreData
static var managedObjectContext: NSManagedObjectContext = {
let coordinator = persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
Раньше ConcurrencyType был mainQueueConcurrencyType
Ни одно из этих изменений не решило проблему
Детализация аварии:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000014153'
*** First throw call stack:
(0x18485cf48 0x19940ff80 0x184863c5c 0x184860c00 0x184764cac 0x18482c978 0x18476de38 0x18460f134 0x1845ebda0 0x1845ed47c 0x18453f2fc 0x184509f04 0x1845d0fdc 0x1845d8fd8 0x1025b5c68 0x1025c181c 0x1845cb830 0x184509ab0 0x18452e1d8 0x1005bce00 0x10029e498 0x100484a08 0x1003c097c 0x1003ca13c 0x1001296e8 0x1025b5ca8 0x1025b5c68 0x1025bb710 0x1848141f8 0x184812060 0x184740ca0 0x18f97c088 0x189e58ffc 0x10011c8e0 0x199c5e8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException