私は複数のNSFetchedResultsControllersをラップし、デリゲートになり、インデックスパスを自身のデリゲートに戻す前に変換するSwiftクラスを持っています。このクラスは、同じプロトコルに準拠している限り、異なるエンティティを返すNSFetchedResultsControllersを受け取ることができます。 Swift 3にアップグレードするとき、私はコンパイルするために同じ機能を得ることができません。Swiftの複数のNSFetchedResultsController 3
たとえば、2つの異なるEntityタイプを返す2つのNSFetchedResultsControllersをラップして、単一のtableViewに表示したいとします。どちらのCoreDataエンティティは以下のプロトコル
protocol ManagedObjectDisplayType : NSFetchRequestResult {
var id:String { get }
func friendlyName() -> String
}
に準拠問題は今NSFetchedResultsControllersは二つのコントローラのタイプが異なるので、私は私のラッパークラスに渡すことができNSFetchedResultsControllerの具体的な種類が存在しない、汎用的であるということです。例えば
:
let entity1Request = NSFetchRequest<Entity1>(entityName: entityName)
let entity1Frc = NSFetchedResultsController<ManagedObjectDisplayType>(fetchRequest: entity1Request, managedObjectContext:mainManagedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
let entity2Request = NSFetchRequest<Entity2>(entityName: entityName)
let entity2Frc = NSFetchedResultsController<ManagedObjectDisplayType>(fetchRequest: entity2Request, managedObjectContext:mainManagedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
私は、私は次のエラーを取得するこれを行うと:総理にかなっている「サポートされていないプロトコルのNSFetchRequestResult」に準拠した具体的なタイプとして 『ManagedObjectDisplayType』を使用します」。
しかし、私がやろうとしていることをやり遂げるための別の方法はわかりません。
'ManagedObjectDisplayType'が、それに準拠したプロトコルではなく、エンティティの抽象スーパークラスであればどうでしょうか?それはプロトコル指向ではありませんが、 'ManagedObjectDisplayType'がコンクリートになります。 – theMikeSwan