在Core数据中保存时应用程序崩溃
df[['val1', 'val2', 'val3', 'val4']] = df[['val1', 'val2', 'val3', 'val4']].apply(lambda x: x/x.sum(), axis=1)
>>> df
cat val1 val2 val3 val4
0 A 0.194444 0.277778 0.000000 0.527778
1 B 0.370370 0.074074 0.037037 0.518519
2 C 0.119048 0.357143 0.142857 0.380952
我使用此代码
在后台将数据保存在Core数据中do {
try context.save() <----------- CRASH ---------
} catch {
print("Failed saving")
}
根据上面的代码,可以同时保存在CoreData中
我做了一些任务来解决问题但是它们没有用。
首先:我想创建一个队列来处理并发保存
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)
}
}
}
上述代码没有解决问题。
第二:CoreDataManager不是单例。我认为这是问题,所以我把它改成了:
let saveQueue = DispatchQueue(label: "start save in CoreData");
saveQueue.async {
DispatchQueue.global(qos: .background).async{
do {
try context.save()
} catch {
print("Failed saving")
}
}
}
第三次:我更改了CoreData堆栈设置
class CoreDataHelper {
static let sharedInstance = CoreDataHelper()
private init() {}
static func getInstance() -> CoreDataHelper {
return sharedInstance
}
//...
}
ConcurrencyType曾经是 mainQueueConcurrencyType
这些变化都没有解决问题
崩溃详情:
static var managedObjectContext: NSManagedObjectContext = {
let coordinator = persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
答案 0 :(得分:0)
SocketHandler.mySocket.emitWithAck("my_event", [session, someInput]).timingOut(after: 3) {data in
let myData = try? JSONDecoder().decode(myStruct.self, from: data)