0

以下のような 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];   
    }   
}
4

2 に答える 2

1

「buttonUpdate:」は、buttonUpdate という名前のメソッドがあり、パラメーターがあることを意味します。performSelectorOnMainThread 呼び出しで「withObject」に「nil」を送信しています。nil パラメータが原因で例外が発生しているか、メソッドが引数を取りません。

メソッドが引数を取らない場合は、次の行を使用します。

 [self performSelectorOnMainThread:@selector(buttonUpdate) withObject:nil 
    waitUntilDone:NO];
于 2013-06-21T11:14:41.720 に答える
1

すぐにわかることの 1 つは、このセレクターを介してメソッドを呼び出していることです。

" buttonUpdate:"

そのメソッド シグネチャのコロンは、渡されるはずのオブジェクト"- (void) buttonUpdate: (NSString *) maybeAStringがあることを意味します (たとえば、"。そして、nil を渡しています。これが問題になる可能性があります (メソッドが nil ではなく、実際のものが渡されることを期待している場合)。 .

于 2013-06-21T11:10:08.140 に答える