帮助破译NSString“传递参数......来自不同的Objective-C类型警告”

时间:2010-01-17 20:05:58

标签: objective-c nsstring const compiler-warnings

我无法破译“传递参数......来自不同的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的常量性质会导致问题。

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

1 个答案:

答案 0 :(得分:2)

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

的方法
- (id)initWithURL:(NSURL *)anURL;

当然,+alloc被声明为:

- (id) alloc;

因此,当编译器看到:

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

分配的返回类型为id,编译器可能会看到上述声明并导致警告。现在,通常,编译器还会警告它找到了选择器的多个签名 - 该特定方法名称的多个签名。

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

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