我有以下代码。如何获取NSBatchDeleteRequest以删除并允许您再次添加回对象
let workorderFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Workorders")
let deleteWorkOrderRequest = NSBatchDeleteRequest(fetchRequest: workorderFetchRequest) //Deletes ALL workorders
//Question is will it delete all references to the work orders correctly now?
try context.execute(deleteWorkOrderRequest)
//Save the work order objects (overwriting any old ones with same id if needed)
do {
try context.save()
print("Saved context with workorders")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
print("Could not save, unknown error")
}
print("deleted references")
一个工作订单看起来像这样...
import Foundation
import CoreData
extension Workorders {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Workorders> {
return NSFetchRequest<Workorders>(entityName: "Workorders");
}
@NSManaged public var address: String?
@NSManaged public var client_id: Int64
@NSManaged public var desc: String?
@NSManaged public var id: Int64
@NSManaged public var phone: String?
@NSManaged public var signaturepath: String?
@NSManaged public var lat: String?
@NSManaged public var lng: String?
@NSManaged public var service: Service?
@NSManaged public var pictures: NSSet?
@NSManaged public var videos: NSSet?
}
// MARK: Generated accessors for pictures
extension Workorders {
@objc(addPicturesObject:)
@NSManaged public func addToPictures(_ value: Pictures)
@objc(removePicturesObject:)
@NSManaged public func removeFromPictures(_ value: Pictures)
@objc(addPictures:)
@NSManaged public func addToPictures(_ values: NSSet)
@objc(removePictures:)
@NSManaged public func removeFromPictures(_ values: NSSet)
}
// MARK: Generated accessors for videos
extension Workorders {
@objc(addVideosObject:)
@NSManaged public func addToVideos(_ value: Videos)
@objc(removeVideosObject:)
@NSManaged public func removeFromVideos(_ value: Videos)
@objc(addVideos:)
@NSManaged public func addToVideos(_ values: NSSet)
@objc(removeVideos:)
@NSManaged public func removeFromVideos(_ values: NSSet)
}
我把它引用看起来像这样的一个服务对象......
import Foundation
import CoreData
extension Service {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Service> {
return NSFetchRequest<Service>(entityName: "Service");
}
@NSManaged public var id: Int64
@NSManaged public var name: String?
@NSManaged public var templatedata: String?
@NSManaged public var workorder: Workorders?
}
当我运行删除代码我在工作模式上设置为Nullify作为删除规则 ...(参见下图)
当我运行批量删除,但它似乎并没有正确无效的服务。当我尝试设置一个新的服务到它...崩溃的工作单
的libC++ abi.dylib:与类型的未捕获的异常终止NSException
我敢肯定,这是这种情况,因为如果我将删除规则设置为在工作单上级联,那么它将修复问题。但是,我想保留旧的服务只是取消参考。
为什么我不能在没有崩溃的情况下将新服务设置到工作单上?
下面附加的是它通过查看控制台消息而崩溃的代码区域,我将其缩小到我尝试设置服务的那一刻。
另外请注意,我使用的是NSMergeByPropertyObjectTrumpMergePolicy,因为我打算再设定相同的ID服务工作单,所以当我创建一个新的服务具有相同ID它应该只是覆盖如果我的理解是正确的,旧服务的数据。这可能是问题,如果是的话,我该如何解决它?