考虑以下实施的几个类:三种不同类别的 .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