gpt4 book ai didi

swift - NSManagedObject 如何符合 NSItemProviderReading 协议(protocol)?

转载 作者:行者123 更新时间:2023-11-28 08:04:59 26 4
gpt4 key购买 nike

在创建了 Core Data 实体的 NSManagedObject 子类之后,我怎样才能使它正确地符合 NSItemProviderReading 协议(protocol)?该协议(protocol)有一个必需的初始值设定项,必须直接在类中声明。但是 NSItemProviderReadinginit(itemProviderData:, typeIdentifier:) 应该调用哪个指定的初始化器?

这是我下面的内容:

import Foundation
import CoreData

@objc(Something)
public class Something: NSManagedObject, NSItemProviderReading {

public override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) {
super.init(entity: entity, insertInto: context)
}

// MARK: - Item Provider Reading

public static var readableTypeIdentifiersForItemProvider: [String] {
return []
}

public required init(itemProviderData data: Data, typeIdentifier: String) throws {
// This seems very hack-y…
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
self.init(context: context)
}
}

调用 self.init(context:) 真的是正确的方法吗?

最佳答案

要符合 NSItemProviderReading 协议(protocol),需要符合您提到的 init 以及静态变量 readableTypeIdentifiersForItemProvider:

init(itemProviderData: Data, typeIdentifier: String)

static var readableTypeIdentifiersForItemProvider: [String]

documentationRequired 注释表明这一点。

我没有发现您的 init 有任何问题,所以如果它编译并按照您计划使用该类的方式工作,我没有发现任何问题。我推荐的是使用依赖注入(inject)在整个应用程序中将核心数据上下文传递给需要它们的 View Controller 。这样您就不必每次都执行烦人的 AppDelegate 代码(而且更安全,因为您可以确保上下文始终可用)。

关于swift - NSManagedObject 如何符合 NSItemProviderReading 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45426924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com