core-data - 尝试保存 CoreData ManageddObject 时崩溃
问题描述
我在尝试像这样保存 CoreData 托管对象时发生了崩溃:
func saveRide(rideDetails details: Ride) {
if managedContext != nil {
let ride = RideDetails(context: managedContext!)
ride.rideId = details.rideId
ride.avgSpeed = Int64(details.avgSpeed ?? 0)
ride.blindSpotLeft = Int64(details.blindSpotLeft ?? 0)
ride.blindSpotRight = Int64(details.blindSpotRight ?? 0)
ride.distance = details.distance ?? 0.0
ride.distanceKeeping = Int64(details.distanceKeeping ?? 0)
ride.forwardCollision = Int64(details.forwardCollision ?? 0)
ride.maxAngle = details.maxAngle ?? 0.0
ride.maxSpeed = details.maxSpeed ?? 0.0
var locations :[LocationDetails] = []
for locationDetails in details.locations {
let location = LocationDetails(context: managedContext!)
location.lat = locationDetails.lat ?? 0.0
location.lon = locationDetails.lon ?? 0.0
location.ride = ride
locations.append(location)
}
if locations.count > 0 {
let locationsSet = NSOrderedSet(array: locations)
ride.addToLocations(locationsSet)
}
do {
try self.managedContext?.save()
}
catch let error {
self.delegate?.didFailuredToCompleteTheOperation?(message: error.localizedDescription)
#if DEBUG
print("Failed to save:\(error)")
#endif
}
}
我在控制台中收到的错误消息是
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFSet addObject:]:尝试插入 nil”
托管对象是:
import Foundation
import CoreData
@objc(RideDetails)
public class RideDetails: NSManagedObject {
}
//
// RideDetails+CoreDataProperties.swift
//
//
// Created by Maria Davidenko on 13/04/2021.
//
//
import Foundation
import CoreData
extension RideDetails {
@nonobjc public class func fetchRequest() -> NSFetchRequest<RideDetails> {
return NSFetchRequest<RideDetails>(entityName: "RideDetails")
}
@NSManaged public var avgSpeed: Int64
@NSManaged public var blindSpotLeft: Int64
@NSManaged public var blindSpotRight: Int64
@NSManaged public var distance: Float
@NSManaged public var distanceKeeping: Int64
@NSManaged public var forwardCollision: Int64
@NSManaged public var maxAngle: Float
@NSManaged public var maxSpeed: Float
@NSManaged public var rideId: String?
@NSManaged public var timestamp: Date?
@NSManaged public var locations: NSOrderedSet?
}
// MARK: Generated accessors for locations
extension RideDetails {
@objc(insertObject:inLocationsAtIndex:)
@NSManaged public func insertIntoLocations(_ value: LocationDetails, at idx: Int)
@objc(removeObjectFromLocationsAtIndex:)
@NSManaged public func removeFromLocations(at idx: Int)
@objc(insertLocations:atIndexes:)
@NSManaged public func insertIntoLocations(_ values: [LocationDetails], at indexes: NSIndexSet)
@objc(removeLocationsAtIndexes:)
@NSManaged public func removeFromLocations(at indexes: NSIndexSet)
@objc(replaceObjectInLocationsAtIndex:withObject:)
@NSManaged public func replaceLocations(at idx: Int, with value: LocationDetails)
@objc(replaceLocationsAtIndexes:withLocations:)
@NSManaged public func replaceLocations(at indexes: NSIndexSet, with values: [LocationDetails])
@objc(addLocationsObject:)
@NSManaged public func addToLocations(_ value: LocationDetails)
@objc(removeLocationsObject:)
@NSManaged public func removeFromLocations(_ value: LocationDetails)
@objc(addLocations:)
@NSManaged public func addToLocations(_ values: NSOrderedSet)
@objc(removeLocations:)
@NSManaged public func removeFromLocations(_ values: NSOrderedSet)
}
import Foundation
import CoreData
@objc(LocationDetails)
public class LocationDetails: NSManagedObject {
}
import Foundation
import CoreData
extension LocationDetails {
@nonobjc public class func fetchRequest() -> NSFetchRequest<LocationDetails> {
return NSFetchRequest<LocationDetails>(entityName: "LocationDetails")
}
@NSManaged public var lat: Double
@NSManaged public var lon: Double
@NSManaged public var ride: RideDetails?
}
我的猜测是这种关系可以做到,但我之前从未在 CoreData 中处理过关系(仅在 RDBMS 中),所以我正在努力修复它。如果有人知道如何修复它,请帮助,这是错误产生。在此先感谢,玛丽亚。
解决方案
推荐阅读
- azure-service-fabric - ImageStoreService IdleSecondary 副本
- node.js - nodejs Express 正则表达式路径:在测试中工作,而不是在代码中工作。我做错了什么?
- algorithm - 检测我的数字异常增长/下降的算法
- sql-server - 在第一个 SELECT 中分配的变量不会在第二个 SELECT 中检索
- android - 工具栏后退/主页按钮的 Xamarin 资源 ID 与 Resource.Id.home 不匹配
- javascript - Ember 项目中类的常规目录是什么?
- laravel - 获取数据集合 Laravel Eloquent 疑惑
- vue.js - 使用 Nightwatch 选择 Vue 组件?
- python - 在倾斜数据集的训练中使用 Precision 和 Recall
- uima - 在 Uima Pipeline 中使用时,TreeTagger 找不到 Charsetname