2010-05-08 4 views
0

Я выяснил, как все вещи StoreKit работают и действительно протестировали рабочий код ... однако у меня есть проблема.Где я могу присоединить делегата StoreKit и наблюдателя в приложении Cocos2d?

Я сделал свой «магазин» слой/сцену SKProductsRequestDelegate. Это правильная вещь? Я получаю начальную информацию о продукте, как так:

SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers: productIDs]; 

[productRequest setDelegate: self]; 
[productRequest start]; 

Проблема заключается в том, что если я перейти на новую сцену, когда запрос идет, текущий слой удерживается productRequest. Это означает, что прикосновения к моей новой сцене/слою обрабатываются как новым слоем, так и старым слоем.

Я мог бы отменить productRequest, покидая сцену, но:

  1. Я не знаю, если он находится в прогрессе в этой точке.
  2. Я не могу освободить его, потому что он может быть или не быть выпущен делегатами запроса.

Должен быть лучший способ сделать это. Я мог бы сделать делегата классом, внешним для текущего слоя, но тогда я не знаю, как легко обновлять слой информацией о продукте при вызове обработчика.

ответ

0

OK, проблема решен .... ergh.

  1. Я пошел вперед и сделал магазин отдельного класса, и решить вопрос о обратных вызовах на сцену, добавив делегат к классу, который содержит слой интерфейса Store. Когда транзакции закончатся, я могу использовать делегат для возврата к моей сцене/слою.

  2. Я решил проблему, не зная, освобожден ли делегат с помощью метода respondsToSelector:, прежде чем пытаться отправить ему сообщение.

  3. Оказалось, что настоящая ошибка была вызвана моей попыткой исправить 1 & 2. Я перегрузил onExit, чтобы сообщить мне, когда удалить класс в качестве делегата магазина. Оказывается, я забыл позвонить [super onExit], где и снимается сцена. Следовательно, он остался сохраненным и не удалялся от touchHandler. К сожалению!