2013-07-25 65 views
2

一個只讀屬性,我在superclass.h定義爲這樣一個屬性:如何重寫超

@property (nonatomic, retain, readonly) NSArray *objects; 

我不得不.m文件的訪問權限。

在我的子類中有一些情況下,我需要寫入此objects屬性。

我已嘗試以下兩種解決方案:

  1. 聲明壓倒一切的readwrite屬性叫我子類objects。但是,當超類中調用[super viewDidLoad]時,這給我一個錯誤。

  2. 在我的子類中聲明不同的屬性 - commentObjects - 並且包含一個標誌以使用超類'objects數組屬性或此子類屬性。有時可以使用超類加載的對象,但有些時候我需要使用我的子類加載的對象。這確實奏效,但是非常混亂,而且看起來像使用兩個不同名稱的屬性爲相同數據的糟糕設計。

有沒有辦法通過使用一個屬性來做到這一點?

+0

你試過使用類別? http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html – jsedano

回答

1

你可以稍微擴展你的第二種方法:而不是包括一個BOOL標誌來指示要使用的屬性,重寫屬性的getter以從超類返回objects的值,或者返回自己設置commentObjects財產:

-(NSArray*)objects { 
    return usecCmmentObjects ? commentObjects : [super objects]; 
} 
+0

我最終使用了這個版本。 – Ramsel