将self分配给CLLocationManager.delegate会生成不兼容的类型警告

时间:2011-04-06 20:14:41

标签: iphone xcode warnings cllocationmanager

应用程序我目前正在进行一段时间没有构建错误,因为升级到xCode 4后,为此代码的最后一行提供了不兼容的类型警告...

locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
locationManager.delegate = self;

有趣的是,在清理和构建之后,xCodes报告没有问题。但是,如果我转到包含此代码的类,则会突然出现构建错误,直到我再次执行清理为止。

实际警告是......

  

警告:语义问题:从“类”

分配给'id'的指针类型不兼容

CLLocationmanager工作正常,我的委托方法被调用,所以一切似乎都正常工作。我想摆脱这个警告。我应该忽略它吗?

5 个答案:

答案 0 :(得分:24)

您是否声明您的委托对象遵循CLLocationManagerDelegate协议?我通常在类扩展中执行此操作,而不是MyObject的头文件。

@interface MyObject()<CLLocationManagerDelegate> 
@end

或在Swift中

@objc class MyObject: NSObject, CLLocationManagerDelegate
{
// implement whichever of the optional protocol functions you need
}

答案 1 :(得分:4)

不一致的警告似乎是一个错误。但真正的问题是上面代码中的self类是否已声明为实现CLLocationManagerDelegate协议。如果你实现了正确的方法,那么无论它是如何声明的,它都会起作用。但是如果类声明中不包含<CLLocationManagerDelegate>,那么编译器会抱怨。如果您没有,那么修复类声明应该修复警告。

答案 2 :(得分:3)

我认为你应该向Apple提交一份错误报告,直到他们对此做了一些事情我想你所能做的就是忽略它。

答案 3 :(得分:2)

我认为您必须将.h文件中的CLLocationManagerDelegate添加为

@interface MyViewController : UIViewController <CLLocationManagerDelegate>

答案 4 :(得分:2)

我也有同样的情况。

添加下面的行,然后警告消息就会消失。

#import <CoreLocation/CLLocationManagerDelegate.h>