Правильный способ обработки передачи простых данных в вызовы withObject - PullRequest
1 голос
/ 20 мая 2011

При использовании target-c существует много разных способов, с помощью которых вы можете наткнуться на то, что будет использоваться сObject.executeSelectorOnMainThread - хороший пример.

[self performSelectorOnMainThread:@selector(aSelector) withObject:anObject waitUntilDone:YES];

Это вызывает селектор aSelector с объектом anObject.Я часто нахожусь с селектором, который принимает простой тип данных, такой как int или enum, и я хочу передать это 'withObject'.Как правильно это сделать?

Ответы [ 2 ]

7 голосов
/ 20 мая 2011

Для таких операций Cocoa действительно нужен класс Objective-C, производный от NSObject. Для передачи простых типов, таких как целочисленное значение, значение типа bool или значение с плавающей точкой, класс NSNumber может использоваться для инкапсуляции значения через вызов селектора. Это довольно легко с помощью служебных методов, которые класс предоставляет как для создания объекта NSNumber из примитивного типа, так и для извлечения этого примитивного типа обратно из объекта:

- (void)action:(id)sender
{
    enum EnumType eVal = /* ... */;
    [self performSelectorOnMainThread:@selector(aMethod:) withObject:[NSNumber numberWithInt:(int)eVal] waitUntilDone:YES];
}

- (void)aMethod:(NSNumber)enumValue
{
    enum EnumType eVal = (EnumType)[enumValue intValue];
}

Существует также класс NSValue, который может делать то же самое для типов более низкого уровня, таких как указатели или байтовые строки.

2 голосов
/ 20 мая 2011

Вы захотите обернуть его в какой-нибудь объект.Либо пользовательский объект данных, либо в случае простых примитивов используйте NSNumber.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...