静态分析器警告返回的双打?

fuz*_*oat 1 iphone cocoa-touch objective-c

我收到Xcode 3.2.5静态分析仪的警告,我不太明白,警告是:

警告:消息'horizo​​ntalAccuracy'的接收者为nil并返回类型为'CLLocationAccuracy'的值,如果([lastGoodLocation horizo​​ntalAccuracy] <= DESIREDACCURACY){

代码编译并运行良好,但我只是好奇发生了什么以及如何解决它.

@property (nonatomic, retain) CLLocation *lastGoodLocation;

@synthesize lastGoodLocation;
Run Code Online (Sandbox Code Playgroud)

.

// CHECK FOR BEST LOCATION
if(lastGoodLocation == nil || [newLocation horizontalAccuracy] < [lastGoodLocation horizontalAccuracy]) {
    NSLog(@"NEWBEST: %0.0fm (%@)", [newLocation horizontalAccuracy], [newLocation timestamp]);
    [self setLastGoodLocation:newLocation];

    // DESIRED ACCURACY & GEOCODE
    if([lastGoodLocation horizontalAccuracy] <= DESIREDACCURACY) {
Run Code Online (Sandbox Code Playgroud)

编辑:

可以将newLocation返回为nil,此代码位于:

locationManager:didUpdateToLocation:fromLocation:

Jef*_*tin 5

iflastGoodLocationnil(条件的左侧||)时,你可以进入外部,并且在该if块中,你正在调用[lastGoodLocation horizontalAccuracy]可能的nil引用.把内心if变成类似的东西

// DESIRED ACCURACY & GEOCODE
if (lastGoodLocation != nil && ([lastGoodLocation horizontalAccuracy] <= DESIREDACCURACY))
Run Code Online (Sandbox Code Playgroud)

#setLastGoodLocation实际可能是设置lastGoodLocation,但分析器可能没有发现.

编辑:

developer.apple.com上的文档建议虽然oldLocation可能是nil(在第一次修复时),newLocation可能不应该 - 如果位置不起作用,我认为你会收到#locationManager:didFailWithError:.