1

私のアプリは、カスタム クラスのインスタンスを格納するコア データを使用しますCustomClass
このクラスには多数のプロパティがあり、そのほとんどは標準型ですが、1 つのプロパティはxxx: Set<CustomObject>です。
したがってxcdatamodeld、 は (標準型を持つ他のものの中で) xxxtype の属性を指定しますTransformablexxxですSet<CustomObject>。そのタイプはOptionalで、トランスフォーマーは現在NSSecureUnarchiveFromDataです。
以前は Transformer が指定されていなかったため、デコードは安全ではありませんでした。しかし、安全でないコーディングは将来廃止される予定であるため、Apple は現在、安全なコーディングを使用することを推奨しています。

安全なコーディングを有効にするために、次のことを行い
CustomClassましNSSecureCodingNSCoding
に以下varが追加されましたCustomClass

public static var supportsSecureCoding: Bool { get { return true } }  

次にpublic required convenience init?(coder aDecoder: NSCoder) {…}、属性xxxが安全にデコードされるように変更しようとしました。私は代わりにそれを知っています

let xxx = aDecoder.decodeObject(forKey: „xxx“) as? Set<CustomObject>  

decodeObject(of:forKey:)ここでofは、デコードするオブジェクトのタイプです。ここでは typeを使用しますSet<CustomObject>
私の問題は、これを定式化する方法がわからないことです:

let xxx = aDecoder.decodeObject(of: Set<CustomObject>.self, forKey: „xxx“)  

エラーが発生しますCannot convert value of type 'Set<CustomObject>.Type' to expected argument type '[AnyClass]?' (aka 'Optional<Array<AnyObject.Type>>‘)
どうやらコンパイラはコンパイルされませんでした

func decodeObject<DecodedObjectType>(of cls: DecodedObjectType.Type, forKey key: String) -> DecodedObjectType? where DecodedObjectType : NSObject, DecodedObjectType : NSCoding  

代わりに

func decodeObject(of classes: [AnyClass]?, forKey key: String) -> Any?

つまりSet<CustomObject>、単一のタイプとしてではなく、タイプのコレクションとして扱われます。

では、単一の型、つまり のみをデコードするように指定するにはどうすればよいSet<CustomObject>でしょうか?

4

1 に答える 1