如何将 NSManagedObject 转换为 NSItemProviderWriting/NSItemProviderReading?
How can I cast a NSManagedObject to NSItemProviderWriting/NSItemProviderReading?
我想实现在 "Delete Icon" 上拖动 tableview 单元格以将其删除的功能。
现在我的问题是如何将我的类型转换为 NSItemProviderWriting/NSItemProviderReading 以使用拖放。
我正在学习本教程:https://exploringswift.com/blog/creating-a-nsitemprovider-for-custom-model-class-drag-drop-api。虽然我失败了,但我仍然无法理解它是如何工作的。
它说类型 'Task' 不符合协议 'Decodable'。('Task' 是我的自定义模型)我也不知道 'kUTTypeData' 是什么在本教程中...
任何人都可以帮助实现这些协议吗?
import Foundation
import CoreData
@objc(Task)
public class Task: NSManagedObject, NSItemProviderWriting, NSItemProviderReading, Codable {
public override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) {
<#code#>
}
required public init(from decoder:Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
}
public static var writableTypeIdentifiersForItemProvider: [String] {
return []
}
public func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? {
let progress = Progress(totalUnitCount: 100)
do {
let encoder = JSONEncoder()
let data = try encoder.encode(self)
progress.completedUnitCount = 100
completionHandler(data, nil)
} catch {
completionHandler(nil, error)
}
return progress
}
public static var readableTypeIdentifiersForItemProvider: [String] {
return []
}
public static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self {
let decoder = JSONDecoder()
do {
let myJSON = try decoder.decode(Task.self, from: data)
return myJSON as! Self
} catch {
fatalError("Err")
}
}
}
在这里您可以找到关于使用核心数据实体实现 Codable
的解释:
您是否考虑过在 drag/drop 处理程序中使用 .objectID.uriRepresentation()
,而不是让 NSManagedObject
符合协议?
我想实现在 "Delete Icon" 上拖动 tableview 单元格以将其删除的功能。
现在我的问题是如何将我的类型转换为 NSItemProviderWriting/NSItemProviderReading 以使用拖放。
我正在学习本教程:https://exploringswift.com/blog/creating-a-nsitemprovider-for-custom-model-class-drag-drop-api。虽然我失败了,但我仍然无法理解它是如何工作的。
它说类型 'Task' 不符合协议 'Decodable'。('Task' 是我的自定义模型)我也不知道 'kUTTypeData' 是什么在本教程中...
任何人都可以帮助实现这些协议吗?
import Foundation
import CoreData
@objc(Task)
public class Task: NSManagedObject, NSItemProviderWriting, NSItemProviderReading, Codable {
public override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) {
<#code#>
}
required public init(from decoder:Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
}
public static var writableTypeIdentifiersForItemProvider: [String] {
return []
}
public func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? {
let progress = Progress(totalUnitCount: 100)
do {
let encoder = JSONEncoder()
let data = try encoder.encode(self)
progress.completedUnitCount = 100
completionHandler(data, nil)
} catch {
completionHandler(nil, error)
}
return progress
}
public static var readableTypeIdentifiersForItemProvider: [String] {
return []
}
public static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self {
let decoder = JSONDecoder()
do {
let myJSON = try decoder.decode(Task.self, from: data)
return myJSON as! Self
} catch {
fatalError("Err")
}
}
}
在这里您可以找到关于使用核心数据实体实现 Codable
的解释:
您是否考虑过在 drag/drop 处理程序中使用 .objectID.uriRepresentation()
,而不是让 NSManagedObject
符合协议?