Objective c 为什么继承需要“继承”;“子类”;NSObject?

Objective c 为什么继承需要“继承”;“子类”;NSObject?,objective-c,inheritance,subclass,nsobject,Objective C,Inheritance,Subclass,Nsobject,为什么继承必须从NSObject开始,然后在另一个类中使用继承 不知道为什么我有一个子类“父类”来自UIViewController。 所以我想创建一个继承父类(ChildClass:FatherClass) 我不能这样做,我得到一个错误日志。 我在这里和谷歌搜索的所有例子都是以NSObject作为父亲开始的 所以我的问题一定是这样的?或者我在某个地方错了 这是错误日志 #0 0x33d6c6f8 in CFStringGetCharacters () CoreFoundation`CFStr

为什么继承必须从NSObject开始,然后在另一个类中使用继承

不知道为什么我有一个子类“父类”来自UIViewController。 所以我想创建一个继承父类(ChildClass:FatherClass)

我不能这样做,我得到一个错误日志。 我在这里和谷歌搜索的所有例子都是以NSObject作为父亲开始的

所以我的问题一定是这样的?或者我在某个地方错了

这是错误日志

#0  0x33d6c6f8 in CFStringGetCharacters ()
CoreFoundation`CFStringGetCharacters:
0x33d6c6f8:  push.w {r8, r10}
谢谢

使用代码在此处编辑

父亲阶级

@class ChildClass;
@interface FatherClass : UIViewController <UITabBarControllerDelegate, UINavigationBarDelegate, UIPopoverControllerDelegate, MKMapViewDelegate, MKAnnotation>
{
     //Some variables
}
@property (nonatomic, strong) ChildClass   *sidebar_table_controller;

-(void) show_modal: (id) sender; // Thats the Method i want to call
@end
现在是孩子

儿童班

@interface ChildClass : FatherClass <UINavigationControllerDelegate, UITableViewDataSource, UITableViewDelegate>
@end

当我将ChildClass:UIViewController更改为ChildClass:FatherClass时,我的应用程序会崩溃。

您可以创建每种类型的对象:具有NSObject父对象的对象或不具有任何父对象的新对象。 所以问题是:为什么要将NSObject用作父亲?因为它实现了创建健壮类所需的所有方法,比如init、dealoc等等


因此,您可以创建自己的层次结构,但您必须重新编写每个方法来管理对象。

您始终可以使用Self调用父类属性和函数。所以你的代码是

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     // Here i want to call Father Method
     [Self show_modal:indexPath]; }
在演示之前,您从未分配过属性

@property (nonatomic, strong) ChildClass   *sidebar_table_controller;

因此,如上所述分配属性并调用函数。

从UIViewController继承没有什么问题。显示如何创建“父类”和“子类”的代码。在创建这些类时,您是否从编译器中得到任何错误或警告?奇怪的是,这是使用断点和不使用断点时唯一的错误。但我将编辑我的问题并输入代码供您查看。如果您用于创建UIViewController子类的代码没有编译器错误或警告,则可能需要堆栈回溯。CFStringGetCharacters()中的一条x86指令确实不足以提供任何上下文信息。代码已编辑,请查看现在是否更好,thanksIt看起来show_modal是一个实例方法,但您正在尝试调用父类的类方法。我不想重新发明轮子。我只想运行一个父亲拥有的方法,也是唯一需要运行父亲而不是儿子的方法。但是孩子必须打电话跟在父亲后面。事情变得更清楚了?还是更难?好吧,我明白了。您需要类似特洛伊木马的答案,但如果您在编写时已经实现了这一点,我认为这与您的问题无关。你能发布一些代码来看看你是如何实现这些类的吗?好的,谢谢。我看到的第一个错误是:[父类show_modal:indexPath];方法“show_modal”不是类方法,而是实例方法,因此如果要调用它,必须执行以下操作之一:-创建一个新的父类对象,然后调用它-从父类扩展子类并使用[self-show_modal:indexPath];你能试试吗?现在让我来!你的意思是:父类*ThaFather=[[fatherclass alloc]init];然后[thadard show_modal:indexath]?就这样?我已经这样做了,我忘了把我上面编辑的代码。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     // Here i want to call Father Method
     [Self show_modal:indexPath]; }
@property (nonatomic, strong) ChildClass   *sidebar_table_controller;