Iphone - как передать параметр в animationDidStop? - PullRequest
0 голосов
/ 19 февраля 2010

У меня есть этот метод ...

- (void) helloThere: (int) myValue {

  // I am trying to pass myValue to animationDidStop
  [UIView beginAnimations:nil context:[NSNumber numberWithInt: myValue]];
  [UIView setAnimationDuration:1.0];
  [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
  [UIView setAnimationDelegate:self];

  // do stuff

  [UIView commitAnimations];
}

тогда я пытаюсь получить myValue для animationDidStop ...

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

  int retrievedValue = (int)context; //??? not giving me the right number

}

но retrievedValue дает мне номер, который не имеет ничего общего с исходным myValue ...

Как получить это число?

спасибо за любую помощь.

Ответы [ 2 ]

7 голосов
/ 19 февраля 2010

См. @ DyingCactus ответ о том, как получить целое число.

Код OP, однако, имеет серьезную проблему в контексте. Поскольку тип контекста void*, UIKit не будет ожидать, что вы передадите в него объект ObjC, поэтому NSNumber не будет сохранен.

Поэтому, когда вы выполняете

[(NSNumber*)context intValue];

в animationDidStop почти наверняка получат сумасшедшие числа или произойдет сбой.

Есть 2 аналогичных способа решения этой проблемы.

(a) Передайте объект с сохранением количества +1 и отпустите его в animationDidStop:

[UIView beginAnimations:nil context:[[NSNumber alloc] initWithInt:myValue]];
....
int retrievedValue = [(NSNumber*)context intValue];
[(NSNumber*)context release];

(b) Передача памяти malloc и free в animationDidStop:

int* c = malloc(sizeof(*c));
*c = myValue;
[UIView beginAnimations:nil context:c];
....
int retrievedValue = *(int*)context;
free(context);
4 голосов
/ 19 февраля 2010

Вы помещаете NSNumber в контекст, поэтому получите его следующим образом:

int retrievedValue = [(NSNumber *)context intValue];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...