performSelectorOnMainThread嵌入在didUpdateToLocation中

时间:2013-06-21 11:07:23

标签: iphone ios objective-c

我试图从didUpdateToLocation方法调用一个方法,如下所示。在我的buttonUpdate方法中,我正在更新接口,并且我试图避免如果我将代码块直接放在didUpdateToLocation方法中而导致的延迟。出于某种原因,下面的代码导致我的应用程序崩溃。有谁知道为什么?谢谢!

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation 
*)newLocation fromLocation:(CLLocation *)oldLocation {

    NSLog(@"didUpdateToLocation: %@", newLocation);
    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) {  

        [self performSelectorOnMainThread:@selector(buttonUpdate:) withObject:nil 
        waitUntilDone:NO];   
    }   
}

2 个答案:

答案 0 :(得分:1)

我立即看到的一件事是你通过这个选择器调用你的方法:

buttonUpdate:

该方法签名中的冒号暗示存在一些应该传递的对象(例如"- (void) buttonUpdate: (NSString *) maybeAString“。并且你传递的是nil,这可能是问题(如果方法是期待一些真实的 - 而不是零 - 被传递出来。

答案 1 :(得分:1)

“buttonUpdate:”表示你有一个名为buttonUpdate的方法并且有参数。您在performSelectorOnMainThread调用中的'withObject'中发送'nil'。由于nil参数导致异常,或者您的方法不接受任何参数。

如果您的方法不带任何参数,请使用此行:

 [self performSelectorOnMainThread:@selector(buttonUpdate) withObject:nil 
    waitUntilDone:NO];