Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c objc从外部调用祖父母方法_Objective C_Xcode_Inheritance - Fatal编程技术网

Objective c objc从外部调用祖父母方法

Objective c objc从外部调用祖父母方法,objective-c,xcode,inheritance,Objective C,Xcode,Inheritance,我最近正在开发一个iphone应用程序,我觉得使用继承可以使结构更加合理和优雅。然而,我正在为继承在objc中如何工作而挣扎。Java中的继承约定在这里似乎不起作用 情况: 这可能有点复杂,但这似乎是描述情况的最佳方式。假设我有两个类,A和B,它们看起来如下: // Class A @interface A: B @end @implementation A - (id)init{ self = [super init]; if(self){ } return

我最近正在开发一个iphone应用程序,我觉得使用继承可以使结构更加合理和优雅。然而,我正在为继承在objc中如何工作而挣扎。Java中的继承约定在这里似乎不起作用

情况:

这可能有点复杂,但这似乎是描述情况的最佳方式。假设我有两个类,A和B,它们看起来如下:

// Class A
@interface A: B
@end

@implementation A
- (id)init{
    self = [super init];
    if(self){
    }
    return self;
}
@end

// Class B
@interface B: NSObject
@property A *littleA;

- (void)doSomething;
- (void)blabla;
@end

@implementation B
- (id) init {
    self = [super init];

    if(self) {
        _littlea = [[A alloc] init]; // error: No known class method for selector 'alloc'
    }
    return self;
}

- (void)doSomething{
    NSLog(@"something");
}

- (void)blabla{
    [littleA doSomething]; // error: No visible @interface for 'A' declares the selector 'doSomething:'
}

@end
在这些类之外,还有一个C类。在B类中,我将'littleA'传递给C类的方法。用这种方法,我做到了:

[littleA isEqual:NULL];// error: No visible @interface for 'A' declares the selector 
我被这些错误信息弄糊涂了。。这就是继承应该做的吗?在Java中,A扩展B,B扩展C,然后我可以从A调用:A.B的方法或A.C的方法


我做错了什么?任何人都可以解释这三条错误信息,这将是一个很大的帮助

在类
B
中,您的属性声明
littleA
缺少星号(在Objective-C中表示变量是对象)

@property A*littleA


我认为这将清除您发布的错误。

这是您代码的复制粘贴吗?如果是这样的话,你不也有一个警告吗?提示:
@property a*littleA(注意指针)无法“静态”分配Objective-C对象。换句话说,你永远不能有一个包含整个对象的变量;您只能声明包含对象引用的变量。@Josh Caswell和James Bucanek感谢您指出这一点。不幸的是,这是我在问题上的错别字。。我的所有对象属性都有*值。我已经修正了问题中的代码。但是了解静态分配对象是很好的。我只知道指针和引用之间的区别,而不知道它们是如何分配的:)在第一行
@interface A:B
上没有错误吗?此外,您是否知道,
A
是子类,而不是
B
?您可能应该将示例代码中的类重命名为
BaseClass
Subclass
,以使其更具可读性。此代码不是您的真实代码,您可能忘记导入
A
。对不起,我的输入错误。代码中有一个*符号。我已在问题中加入这一点。但这似乎不是错误的原因。。。