2010-05-08 4 views
0

StoreKit의 모든 작동 방식을 파악하고 실제로 작동하는 코드를 테스트 한 결과 ... 그러나 문제가 있습니다.StoreKit 델리게이트와 옵저버를 Cocos2d 앱에 첨부하려면?

"store"레이어/장면을 SKProductsRequestDelegate으로 만들었습니다. 이것이 올바른 일일까요? 나는 초기 제품 정보과 같이 얻을 :

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

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

문제는 요청이 진행 중일 때 나는 새로운 장면으로 전환하면, 현재 레이어가 productRequest에 의해 유지되는 것입니다. 즉, 새 장면/레이어의 터치는 새 레이어와 이전 레이어 모두에서 처리됩니다.

나는 현장을 떠날 때 productRequest을 취소 할 수도 있지만 : 그것은 그 시점에서 진행중인 경우

  1. 모르겠어요.
  2. 요청 대리인에 의해 릴리스되었거나 릴리스되지 않았기 때문에 릴리스 할 수 없습니다.

이 작업을 수행하는 더 좋은 방법이 있어야합니다. 델리게이트를 현재 레이어의 외부 클래스로 만들 수는 있지만 핸들러가 호출 될 때 제품 정보로 레이어를 쉽게 업데이트하는 방법을 알지 못합니다.

답변

0

OK, 문제 해결 .... 오류.

  1. 내가 나서서 가게를 별도의 클래스를 만들고, 저장 (Store) 인터페이스의 층을 보유하고있는 클래스에 대리자를 추가하여 장면에 대한 콜백의 문제를 해결했다. 트랜잭션이 끝나면 델리게이트를 사용하여 내 장면/레이어를 다시 호출 할 수 있습니다.

  2. 메시지를 보내기 전에 respondsToSelector: 메서드를 사용하여 대리자가 해제되었는지 알 수없는 문제가 해결되었습니다.

  3. 실제 버그는 처음에 1 & 2를 수정하려고 시도한 것으로 밝혀졌습니다. onExit을 지나치면 스토어 대리인으로 클래스를 삭제할시기를 알려주세요. 현장이 공개되는 곳인 [super onExit]에 전화하는 걸 잊어 버렸습니다. 따라서, 그것은 유지 된 상태로 유지되고 touchHandler에서 제거되지 않습니다. 죄송합니다.