关于相同方法的冲突参数类型和不兼容转换的编译器错误

时间:2014-04-01 02:49:25

标签: objective-c compiler-errors

我在尝试使用Chartboost中的方法时收到警告:

  

执行'didCacheInterstitial:'时的参数类型冲突:''CBLocation'与'NSString * __ strong'

采用以下方法:

- (void)didCacheInterstitial:(NSString *)location {
NSLog(@"interstitial cached at location %@", location);   
}

  

指向整数转换的不兼容指针将'NSString *'发送到'CBLocation'类型的参数

执行以下操作时:

[cb cacheInterstitial:@"Main Menu"];

这里有什么问题?

2 个答案:

答案 0 :(得分:2)

声明didCacheInterstitial:的头文件说明了这一点:

- (void)didCacheInterstitial:(CBLocation)location;

与您的实施不符。方法的定义必须与声明匹配。

答案 1 :(得分:1)

此警告旨在鼓励开发人员使用头文件中CBLocation枚举中的预设位置。

但是,最新的Chartboost SDK向后兼容传递NSString参数的插页式调用。

例如,尽管发出警告,以下调用仍然可以正常工作:

[[Chartboost sharedChartboost] cacheInterstitial:@"foobar"];

SDK中的一些技巧会自动转换@" foobar"很长一段时间,所以你可以忽略警告。

关于日志记录,您可以考虑使用NSLog(@"%@", location);来确保人类可读的位置输出而不是难以理解的数字。如上所述,尽管有警告,这仍然有效。

完全披露:我为Chartboost工作。