performSelectorInBackground with multiple params

后端 未结 4 1889
孤街浪徒
孤街浪徒 2020-12-14 09:56

How can I call a method with multiple params like below with performSelectorInBackground?

Sample method:

-(void) reloadPage:(NSInteger)pageIndex fir         


        
4条回答
  •  伪装坚强ぢ
    2020-12-14 10:47

    The problem is that performSelectorInBackground:withObject: takes only one object argument. One way to get around this limitation is to pass a dictionary (or array) of arguments to a "wrapper" method that deconstructs the arguments and calls your actual method:

    - (void)callingMethod {
        NSDictionary * args = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInteger:pageIndex], @"pageIndex",
                                [NSNumber numberWithBool:firstCase], @"firstCase",
                                nil];
        [self performSelectorInBackground:@selector(reloadPageWrapper:)
                               withObject:args];
    }
    
    - (void)reloadPageWrapper:(NSDictionary *)args {
        [self reloadPage:[[args objectForKey:@"pageIndex"] integerValue]
               firstCase:[[args objectForKey:@"firstCase"] boolValue]];
    }
    
    - (void)reloadPage:(NSInteger)pageIndex firstCase:(BOOL)firstCase {
        // Your code here...
    }

    This way you're only passing a "single" argument to the backgrounding call, but that method can construct the multiple arguments you need for the real call (which will take place on the same backgrounded thread).

提交回复
热议问题