Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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
如何在iOS中使用id对象参数调用方法?_Ios_Objective C - Fatal编程技术网

如何在iOS中使用id对象参数调用方法?

如何在iOS中使用id对象参数调用方法?,ios,objective-c,Ios,Objective C,我创建了一个协议和一个添加类的方法。但当我想通过此方法添加类时,我有一个错误: arc不允许将objective-c指针隐式转换为“\u自动释放id*” self.homeViewController = [[HomeViewController alloc] init]; [DataController addProgressListener:self.homeViewController]; MyProtocol类 - (void) addProgressListener:(id

我创建了一个协议和一个添加类的方法。但当我想通过此方法添加类时,我有一个错误: arc不允许将objective-c指针隐式转换为“\u自动释放id*”

 self.homeViewController = [[HomeViewController alloc] init];   
 [DataController addProgressListener:self.homeViewController];
MyProtocol类

- (void) addProgressListener:(id*)idbProgressListener {
        if(self.progressListeners == nil)
            self.progressListeners = [NSMutableArray<IDBProgressListener> alloc];

        [self.progressListeners addObject:*idbProgressListener];
    }
-(void)addProgressListener:(id*)idbProgressListener{
if(self.progressListeners==nil)
self.progressListeners=[NSMutableArray alloc];
[self.progressListeners addObject:*idbProgressListener];
}

对于id,您不必使用*。id内部有一个分配给自身的指针。您不需要显式地传递它。

删除协议类中方法中的指针
id
而不是
*id
,告诉我发生了什么事Jaycee的意思是
id
本质上是
(void*)
的类型定义,这意味着它已经是指针类型了。编写
id*
就是定义指向指针的指针,这不是您想要的。它可以工作。但它给了我这样的错误:[DataController addProgressListener:]:发送到类的无法识别的选择器不是真正的void*,而是非常类似于NSObject*(它不完全相同,但在大多数情况下足够接近)。DataController不是一个实例,它是一个类。有一个实例方法addProgressListener:,但没有类方法(无论如何都没有多大意义)。是的,当然。我错过了这个。谢谢。:)