【问题标题】:How can I cast a NSManagedObject to NSItemProviderWriting/NSItemProviderReading?如何将 NSManagedObject 转换为 NSItemProviderWriting/NSItemProviderReading?
【发布时间】:2020-05-17 12:45:09
【问题描述】:

我想实现在“删除图标”上拖动表格视图单元格以将其删除的功能。

现在我的问题是如何将我的类型转换为 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")
        }
    }


}

【问题讨论】:

    标签: swift drag-and-drop


    【解决方案1】:

    您是否考虑过在拖放处理程序中使用.objectID.uriRepresentation(),而不是使NSManagedObject 符合协议?

    【讨论】:

      【解决方案2】:

      您可以在此处找到使用 Core Data 实体实现 Codable 的说明: https://stackoverflow.com/a/46917019

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多