将NSError **作为方法参数传递时的编译器警告

时间:2010-04-07 11:03:22

标签: objective-c cocoa compiler-warnings compiler-bug

在过去的4个小时里,我一直在摸不着头脑,尝试各种小实验,但我似乎无法弄清楚出了什么问题。这可能是编译器错误吗?

Test.m:

- (id)initWithContentsOfURL:(NSURL *)aURL error:(NSError **)error
{
    if (!(self = [super init])) {
        return nil;
    }
    return self;
}

的main.m:

NSError *error;

Test *t = [[Test alloc] initWithContentsOfURL:[NSURL fileURLWithPath:@"/"] error:&error];

这是编译器警告(来自main.m):

  

警告:不兼容的Objective-C   类型'struct NSError **',预期   传球时'struct NSDictionary **'   论证2   'initWithContentsOfURL:错误:'来自   不同的Objective-C类型

我正在使用最新版本的Xcode和Snow Leopard。

1 个答案:

答案 0 :(得分:5)

我怀疑它正在选择一个不同的选择器实例initWithContentsOfURL:error: - 也许是NSAppleScript中的那个。请注意,[NSObject alloc]会返回id

您的代码在运行时是否按预期工作?

尝试将[Test alloc]的返回值转换为Test*


Test *t = [(Test*)[Test alloc] initWithContentsOfURL:[NSURL fileURLWithPath:@"/"] error:&error];