考慮以下實施的幾個類:三種不同類別的 .m文件執行anotherClass
如何將一個子類設置爲obj-c中超類的屬性?
@implementation anotherClass
@synthesize myObj;
...
//All of the code that uses the myObj property...
...
@end
//superClass.h
...
@interface superClass
//Insert useful code
@end
//subClass.h
...
@interface subClass : superClass
//Insert useful code
@end
//Another class that uses various sub-classes of superClass
@interface anotherClass
{
superClass* myObj;
}
@property (strong, atomic) superClass* myObj;
@end
.h文件中實現我怎樣才能將subClass
的實例設置爲屬性anotherClass.myObj
的實例?
在我的具體情況下,我想定義一個屬性是UIViewController
。我有多個子類,UIViewControllers,我需要能夠交換他們在我的iOS應用程序中的特定屬性。
每次我嘗試將我的孩子UIViewControllers中的一個設置爲我的UIViewController
屬性時,該應用程序崩潰。但是,如果我將屬性重新定義爲其中一個子類的實例,然後實例化子類,則它完美地起作用。我真的需要有能力將這些控制器交換出來。我怎樣才能做到這一點?
UPDATE
好,向大家致歉誰一直在尋找這一點。得到一個明顯的答案後,我決定重新編寫所有相關的代碼。我創建了一個具有不同名稱的新屬性,將我的所有分配代碼註釋掉,並重新編寫它以指向新的屬性。它的工作方式應該如此。我不確定爲什麼這不是第一次,但它現在應該如此。但是,我仍然不清楚爲什麼我的應用程序崩潰。
將子類分配給超類型變量是完全合法的,不會導致問題。它在UIKit中完成_constantly_。請發佈有關崩潰的更多詳細信息,以及您在分配前後如何處理對象。 – 2012-01-12 20:07:03
謝謝Josh(和Caleb)我會將Caleb的回答標記爲答案。我不確定發生了什麼,因爲我認爲這會起作用,因爲它不會讓我迷路。我會更多地討論代碼,看看我能否制定一個不同的問題。 – RLH 2012-01-12 20:14:01