peformSelector有两个参数

时间:2013-05-28 14:05:44

标签: ios objective-c nsthread

我要在后台或新线程中运行此方法。如何在performSelector中传递两个参数?

[self addMessageFromRemoteNotification:userInfo updateUI:NO];

-(void)addMessageFromRemoteNotification:(NSDictionary *)userInfo updateUI:(BOOL)updateUI
{
}

3 个答案:

答案 0 :(得分:1)

如果必须使用performSelector并且需要N个参数,只需将它们包装在数组或字典中,并使被调用方法的签名具有NSArray或NSDictionary的单个参数。任何原始类型(如int,float等)都需要包装在NSNumber中。

使用NSArray的示例:

- (void) addMessageFromRemoteNotification:(NSArray*)parameters
{
}

...

[self performSelector:@selector(addMessageFromRemoteNotification:)
withObject:@[ obj1, obj2, obj3, @(4.0f)]];

使用NSDictionary的示例:

- (void) addMessageFromRemoteNotification:(NSDictionary*)parameters
{
}

...

[self performSelector:@selector(addMessageFromRemoteNotification:)
withObject:@{ @"prop1": @"prop1value", @"prop2": @(4.0f) }];
祝你好运!

答案 1 :(得分:0)

有方法

[self performSelector:@selector(addMessageFromRemoteNotification:) withObject:param1 withObject:param2];

你可以使用它。

答案 2 :(得分:0)

只需为要发送的数据创建一个模型类,例如 -

@interface Car : NSObject

@property (nonatomic, strong) NSString *manufacturer;
@property (nonatomic, strong) NSString *colour;
@property (nonatomic, strong) NSDate *year;

@end

然后在你的performSelector:方法中传递它的一个实例。

它通常比传递多个参数更好,如果您决定更改数据模型(例如,添加更多属性) - 虽然它将取决于当然的情况。