2016-10-15 2 views
0

タイトルはあまり明確ではありません - 申し訳ありませんが、私が達成しようとしていることを表現する良い方法を見つけることができませんでした。デザイン:UITabViewControllerで2つのエンティティ(両方とも同じ抽象親クラス)を持っています

これは私の設定です - 私はAbstract CoreDataクラスを持っていて、とphotoを持つParentと呼んでいます。私はParentを継承してChild1Child2を作った。 Child1Child2、および各タブのUIViewControllerは(抽象基本クラスで、これだけの特性)のみnamephotoを表示するためにUITableViewを持っています:
は、私は2つのタブがありUITabViewControllerを持っていると思います。

これを行う最善の方法は何ですか?これを行う「簡単な」方法は、抽象基本クラスを無視し、UITabViewControllerタブの2つの異なるUIViewControllerを作成し、それぞれにNSFetchedResultsControllerを持ち、重複したコードをたくさん持っています。
でなければなりません。

答えて

0

これは、私はその2つのクラスChild1Child2と私のParent抽象基底クラスを持っている...興味がある人のために、私がやってしまった何
です。
私はParentエンティティを保持するためのものジェネリックUIViewControllerを作成したがParentUIViewControllerと呼ばれる:

var entity: String { get { return "Parent" } } 
let context = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext 
lazy var fetchedResultsController: NSFetchedResultsController<ListObject> = { 
    let fetchRequest = NSFetchRequest<Parent>(entityName: self.entity) 
    let sort = NSSortDescriptor(key: "name", ascending: true) 
    fetchRequest.sortDescriptors = [sort] 

    let frc = NSFetchedResultsController(
     fetchRequest: fetchRequest, 
     managedObjectContext: self.context, 
     sectionNameKeyPath: nil, 
     cacheName: nil) 

    frc.delegate = self 

    return frc 
}() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // do stuff with fetchedResultController 
    // fetchedResultsController.object(atIndex: IndexPath) has a "name" and "photo" attribute so I use them 
} 

は、その後、私はちょうど2つのその他UIViewController Sを作成し、私がしなければならなかったすべては

class Child1VC: ParentUIViewController { 
    override var entity: String { get { return "Child1" } } 
} 
class Child2VC: ParentUIViewController { 
    override var entity: String { get { return "Child2" } } 
} 
ました
関連する問題