2013-05-28 4 views
0

Я должен запустить этот метод на фоне или в новом потоке. Как передать два аргумента в performSelector?peformSelector с двумя аргументами

[self addMessageFromRemoteNotification:userInfo updateUI:NO]; 

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

Это поможет вам. http://stackoverflow.com/questions/2716143/sel-performselector-and-arguments/9108934#9108934 – yunas

+0

см моего ответ на этот вопрос: http://stackoverflow.com/questions/16731105/how-can -i-pass-multiple-objects-to-a-delayed-method/16731378 # 16731378 – pmk

ответ

0

есть метод

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

вы можете использовать это.

+0

Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [AppDelegate addMessageFromRemoteNotification:]: непризнанный селектор, отправленный в экземпляр 0x21c7b0' – dineshsurya

+0

I получил это исключение ... – dineshsurya

+0

Я уверен, что '-performSelector: withObject: withObject:' просто составлен. –

0

Просто создать класс модели для данных, которые вы хотите отправить, например, -

@interface Car : NSObject 

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

@end 

Затем передать его экземпляр в вашем performSelector: метод.

Часто бывает лучше, чем передавать несколько параметров, если вы решите изменить модель данных (например, добавить дополнительные свойства) - хотя это будет зависеть от обстоятельств, конечно.

+0

Это не ошибка, но это немного тяжело. просто используйте словарь ... это то, что делает фреймворк везде: 'NSDictionary * userInfo' –

+0

Также, вероятно, вопрос стиля программирования, или если ему соответствуют параметры (например, если вы часто используете несколько параметров в своем коде, будет ли выделенная модель сделать вещи более ясными) – SomaMan

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

Успехов!

+0

Я бы выбрал NSDictionary вместо NSArray, но это отвечает на вопрос :) –

+0

Обновлено, чтобы показать пример NSDictionary – jjxtra

Смежные вопросы