0
-(void)application :(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{

    [self addMessageFromRemoteNotification:userInfo updateUI:NO];

}

上記のメソッドを performSelectorInBackground メソッドで実行する必要がありますが、単一オブジェクトのオプションがあります。コードを変更するにはどうすればよいですか?

4

2 に答える 2

2

performSelectorInBackground を介して複数のパラメーターを渡す方法はありません。問題が発生したときに問題を解決する方法は、辞書を渡すことです。これは、リテラル NSDictionary 構文を使用すると簡単になります。

-(void)application :(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [self performSelectorInBackground:@selector(backgroundMethod:) withObject:@{@"userInfo" : someUserInfoDictionary, @"updateUI" : @(NO)}];
}
-(void)backgroundMethod:(NSDictionary *)params
{
    [self addMessageFromRemoteNotification:params[@"userInfo"] updateUI:[params[@"updateUI"] boolValue]];
}
于 2013-03-27T11:26:07.133 に答える
2

GCD を使用します。

-(void)application :(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [self addMessageFromRemoteNotification:userInfo updateUI:NO];
    });

}

dispatch_async はすぐに戻り、ブロックはバックグラウンドで非同期に実行されます。

于 2013-03-27T11:16:26.703 に答える