Core data 尝试保存CoreData ManagedObject时崩溃
我在尝试保存CoreData托管对象时发生崩溃,如下所示:Core data 尝试保存CoreData ManagedObject时崩溃,core-data,relationship,nsmanagedobject,nsmanagedobjectcontext,Core Data,Relationship,Nsmanagedobject,Nsmanagedobjectcontext,我在尝试保存CoreData托管对象时发生崩溃,如下所示: func saveRide(rideDetails details: Ride) { if managedContext != nil { let ride = RideDetails(context: managedContext!) ride.rideId = details.rideId ride.avgSpeed = Int64(de
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”而终止应用程序,原因:'-[\u 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
@objc(RideDetails)
公共类ridedeails:NSManagedObject{
}
//
//RideDetails+CoreDataProperties.swift
//
//
//由玛丽亚·戴维登科于2021年4月13日创作。
//
//
进口基金会
导入CoreData
延伸脊尾{
@nonobjc公共类func fetchRequest()->NSFetchRequest{
返回NSFetchRequest(entityName:“ridedDetails”)
}
@NSManaged public var avgSpeed:Int64
@NSManaged公共变量blindSpotLeft:Int64
@NSManaged PUBLINDSPOTTRIGHT:Int64
@NSV管理的公共var距离:浮动
@NSM管理的公共var距离保持:Int64
@NSManaged public var forwardCollision:Int64
@NSManaged public var maxAngle:浮点
@NSManaged public var maxSpeed:浮点
@NSManaged public var rideId:字符串?
@NSManaged public var时间戳:日期?
@NSManaged公共var位置:NSOrderedSet?
}
//标记:为位置生成的访问器
延伸脊尾{
@objc(插入对象:inLocationStatIndex:)
@NSManaged public func insertIntoLocations(uValue:LocationDetails,在idx:Int处)
@对象JC(从LocationSatiIndex:中移除对象)
@NSManaged public func removeFromLocations(在idx:Int处)
@objc(插入位置:索引:)
@NSManaged public func insertIntoLocations(Value:[LocationDetails],位于索引:NSIndexSet)
@objc(RemovelocationStatIndex:)
@NSManaged public func removeFromLocations(在索引处:NSIndexSet)
@objc(replaceObjectInLocationStatIndex:withObject:)
@NSManaged public func replaceLocations(在idx:Int处,值为:LocationDetails)
@objc(替换位置索引:带位置:)
@NSManaged public func replaceLocations(索引处:NSIndexSet,值:[LocationDetails])
@objc(添加位置对象:)
@NSManaged public func addToLocations(u值:LocationDetails)
@objc(removeLocationsObject:)
@NSManaged public func removeFromLocations(\值:LocationDetails)
@objc(添加位置:)
@NSManaged public func addToLocations(u值:NSOrderedSet)
@objc(移除速度:)
@NSManaged public func removeFromLocations(u值:nOrderedSet)
}
进口基金会
导入CoreData
@objc(位置详细信息)
公共类位置详细信息:NSManagedObject{
}
进口基金会
导入CoreData
扩展位置详细信息{
@nonobjc公共类func fetchRequest()->NSFetchRequest{
返回NSFetchRequest(entityName:“LocationDetails”)
}
@NSManaged public var lat:双精度
@NSManaged公共变量lon:Double
@NSVAR管理的公共设施:RideDetails?
}
我的猜测是这种关系可以做到这一点,但我以前从未在CoreData中处理过关系(仅在RDBMS中),所以我正在努力修复它。如果有人知道如何修复它,请帮助,这是错误生产。
提前感谢,,
Maria.提示:添加异常断点。现在我开始无法保存:Error Domain=NSCocoaErrorDomain Code=133010“无法保存引用在其自身存储之外的对象。”