我在尝试像这样保存 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 中),所以我正在努力修复它。如果有人知道如何修复它,请帮忙,这是错误产生。 提前致谢, 玛丽亚。