我无法破译“传递参数......来自不同的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的常量性质会导致问题。
我确信我在这里是一个甜甜圈,忽略了一些简单的事情!请有人帮我解决这个警告吗?非常感谢提前!
答案 0 :(得分:2)
系统框架中有许多声明为:
的方法- (id)initWithURL:(NSURL *)anURL;
当然,+alloc
被声明为:
- (id) alloc;
因此,当编译器看到:
ViewController *viewController = [[ViewController alloc] initWithURL:URL];
分配的返回类型为id
,编译器可能会看到上述声明并导致警告。现在,通常,编译器还会警告它找到了选择器的多个签名 - 该特定方法名称的多个签名。
如果不是,很可能是因为您没有将ViewController.h
导入包含上述代码行的文件中。
简而言之,不会声明与另一种采用不同类型参数的方法同名的方法。