0

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

[self addMessageFromRemoteNotification:userInfo updateUI:NO];

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

3 回答 3

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) }];

祝你好运!

于 2013-05-28T16:28:04.503 回答
0

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

@interface Car : NSObject

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

@end

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

无论如何,它通常比传递多个参数要好,以防您决定更改数据模型(例如,添加更多属性)——尽管这当然取决于具体情况。

于 2013-05-28T14:51:36.767 回答
0

有方法

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

你可以用这个。

于 2013-05-28T14:08:20.927 回答