Ответ на это довольно прост, как бы это ни было немного странно. IBActions вызываются в алфавитном порядке. См. пример ниже.
Ниже приведены 6 методов IBAction, каждый из которых распечатывает, какой это метод.
В файле .h...
- (IBAction)a:(id)sender;
- (IBAction)b:(id)sender;
- (IBAction)c:(id)sender;
- (IBAction)d:(id)sender;
А в файле .m...
- (IBAction)a:(id)sender {
NSLog(@"a");
}
- (IBAction)b:(id)sender {
NSLog(@"b");
}
- (IBAction)c:(id)sender {
NSLog(@"c");
}
- (IBAction)d:(id)sender {
NSLog(@"d");
}
Когда я нажимаю на кнопку, связанную со всем этим, я получаю следующий журнал...
2013-06-05 18:06:52.637 TestIBAction[49798:c07] a
2013-06-05 18:06:52.637 TestIBAction[49798:c07] b
2013-06-05 18:06:52.637 TestIBAction[49798:c07] c
2013-06-05 18:06:52.637 TestIBAction[49798:c07] d
Если вы посмотрите на них в алфавитном порядке, они будут запущены следующим образом; a, b, b, d, e, f
создание показанного журнала. Даже если вы переупорядочиваете IBActions или связываете их по-разному, создается один и тот же журнал.
Простой ответ на эту проблему состоит в том, чтобы добавить буквы перед именами ваших методов, такими как aOne, bTwo, cThree
, и тогда они будут вызываться в этом порядке, тогда как, если вы оставите их One, Two, Three
, они будут вызываться как one, three, two
из-за этого алфавитного порядка.
Надеюсь, это поможет людям. Это поставило меня в тупик на самое долгое время.
person
Dummy Code
schedule
06.06.2013