【发布时间】:2012-02-09 02:56:36
【问题描述】:
考虑以下几个类的实现:
三个不同类的.h文件实现
//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
.m 文件实现anotherClass
@implementation anotherClass
@synthesize myObj;
...
//All of the code that uses the myObj property...
...
@end
如何将subClass 的实例设置为属性anotherClass.myObj 的实例?
在我的具体情况下,我想定义一个属性为UIViewController。我有多个子类 UIViewControllers,我需要能够在我的 iOS 应用程序中的特定属性上交换它们。
每次我尝试将我的一个子 UIViewControllers 设置为我的 UIViewController 属性时,应用程序都会崩溃。但是,如果我将属性重新定义为子类之一的实例,然后实例化一个子类,它就可以完美地工作。我真的需要能够将这些控制器换入和换出。我该怎么做?
更新
好吧,向所有看到这个的人道歉。在得到一个明显的答案后,我决定重新编写所有相关的代码。我创建了一个具有不同名称的新属性,注释掉了我所有的分配代码并重新编写了它以指向新属性。它按应有的方式工作。我不确定为什么这第一次不起作用,但现在它的行为应该如此。但是,我仍然不清楚为什么我的应用程序崩溃了。
【问题讨论】:
-
将子类分配给超类类型的变量是完全合法的,不会引起问题。它在 UIKit 中不断地完成。请发布有关崩溃的更多详细信息以及您在分配之前和之后对对象所做的其他操作。
-
感谢 Josh(和 Caleb),我会将 Caleb 的回复标记为答案。我不确定发生了什么,因为我认为这会起作用,但因为它不会,我迷路了。我会更多地摆弄代码,看看我是否可以提出一个不同的问题。
标签: objective-c ios oop inheritance properties