0

我无法破译“从不同的 Objective-C 类型警告传递参数......”。

我有一个常量字符串声明为:

extern NSString * const URL_1;

并定义为:

NSString * const URL_1 = @"http://someurl";

例如,如果我将该常量分配给 NSString,如下所示:

NSString *URL = nil;
...
URL = [[NSString alloc] initWithString:URL_1];

并将这个 NSString 作为参数传递给期望 NSString 的函数:

ViewController *viewController = [[ViewController alloc] initWithURL:URL];

函数签名:

- (id)initWithURL:(NSString *)URL

我收到一条警告,提示我“正在传递 'initWithURL' 的参数 1:来自不同的 Objective-C 类型”

据我了解,NSString 对象在创建后是不可变的,并且我在创建时将值分配给字符串,所以我不明白为什么 URL_1 的常量性质会导致问题。

我确信我在这里是一个甜甜圈,忽略了一些简单的事情!请问有人可以帮我解决这个警告吗?提前谢谢了!

4

1 回答 1

2

系统框架中有许多方法被声明为:

- (id)initWithURL:(NSURL *)anURL;

并且,当然,+alloc被声明为:

- (id) alloc;

因此,当编译器看到:

ViewController *viewController = [[ViewController alloc] initWithURL:URL];

分配的返回类型是id,编译器可能会看到上述声明并导致警告。现在,一般来说,编译器也会警告它找到了选择器的多个签名——该特定方法名称的多个签名。

如果不是,很可能是因为您没有导入ViewController.h到包含上述代码行的文件中。

简而言之,不要声明与另一个采用不同类型参数的方法同名的方法。

于 2010-01-17T20:22:54.117 回答