2010-02-18 29 views
0

如果你想改變它的一個屬性的值修改視圖控制器的默認行爲,是它認爲更好的形式來重寫性能相通過父視圖控制器設置它們

  1. 實例化類並直接設置其屬性,或者

  2. 子類它並覆蓋屬性?

對於前者,它將成爲父視圖控制器的責任來配置其子項,而後者則是子項將有效地配置自己。

編輯:一些詳細信息:

我指的類是FetchedTableViewController,的UITableViewController的子類,我做了顯示核心數據的結果提取操作。

我想要顯示提取結果的兩個位置,它們每個都有不同的提取請求。我試圖決定是否最好爲每一個創建一個子類,並重寫fetchRequest屬性,或使其成爲父控制器的責任,爲其子設置fetchRequest屬性。

回答

0

從您的描述,這聽起來像,你應該提供自己的init的地方:

- (id)initWithParamterINeed: (BOOL)aParameter; 
{ 
    if ((self = [super initWithNibName: @"MyNibName" bundle: nil])) { 
     parameter = aParameter; 
    } 
    return self; 
} 
+0

我希望能夠做到這一點,但不幸的是,控制器是在IB中實例化的,所以我受限於它無法使用自定義的init方法。 – robinjam 2010-02-18 16:50:32

+0

呵呵。我不知道你能做到這一點。聽起來像我稍後有事要調查,因爲這聽起來像我應該閱讀的東西。感謝您的評論。 :) – 2010-02-18 16:53:29

+0

無論何時從庫中將對象拖入IB中的接口,都可以有效地實例化它。唯一的例外是像File's Owner和First Responder這樣的代理對象。不幸的是,IB不夠聰明,無法使用自定義的init方法,所以我必須使用屬性來代替;) – robinjam 2010-02-18 17:09:58

0

一般來說,可可的設計是爲了最大限度地減少子類(因此委託人的廣泛使用)。也就是說,UIViewController是專門設計的子類。由於最好保持代碼「本地」,我建議繼承。

+0

我才意識到有我的問題有些含糊不清。我正在討論的類實際上已經是UITableViewController的一個子類。讓我更新我的問題以提供更多信息。 – robinjam 2010-02-18 16:15:12

相關問題