withObject メソッドのキャストを行うアダプター メソッドを使用して問題を解決しました。私の問題は、typedef 列挙型を使用し、それを値として withObject に渡したいということでした。
performSelect メッセージを使用してこのメソッドを呼び出したいと思いました。
-(void) requestInfosAndPersistByMonsterType:(MonsterTypes)monsterType {
}
ご覧のとおり、次のように定義された MonsterTypes typedef を要求します。
typedef enum
{
MonsterTypeIWerwolf = 0,
MonsterTypeITempler = 1,
MonsterTypeIUndefined,
} MonsterTypes;
実際に上記のメソッドを呼び出すことができるようにするために、それを呼び出すこのアダプターを構築します。
-(void)monsterTypeFromObject:(id)_monsterType {
if ([_monsterType respondsToSelector:@selector(intValue)]) {
int _t = [_monsterType intValue];
switch (_t) {
case MonsterTypeIWerwolf:
_t = MonsterTypeIWerwolf;
break;
case MonsterTypeITempler:
_t = MonsterTypeITempler;
break;
default:
_t = MonsterTypeIUndefined;
break;
}
[self requestInfosAndPersistByMonsterType:_t];
}
}
次のように使用されます。
[self performSelector:@selector(monsterTypeFromObject:) withObject:[NSNumber numberWithUnsignedInt:monsterType] afterDelay:5.0f];
ここで詳細に説明されています:
http://kerkermeister.net/objective-c-adapter-from-nsinteger-to-id-when-using-performselector-withobject/