@@ -43,6 +43,8 @@ - (instancetype)initWithProductsRequest:(SKProductsRequest *)request {
4343 self = [super init ];
4444 if (!self) return nil ;
4545
46+ _taskCompletionSource = [BFTaskCompletionSource taskCompletionSource ];
47+
4648 _productsRequest = request;
4749 _productsRequest.delegate = self;
4850
@@ -63,8 +65,9 @@ - (void)dealloc {
6365// /--------------------------------------
6466
6567- (BFTask *)findProductsAsync {
66- _taskCompletionSource = [BFTaskCompletionSource taskCompletionSource ];
67- [_productsRequest start ];
68+ if (!_taskCompletionSource.task .completed ) {
69+ [_productsRequest start ];
70+ }
6871 return _taskCompletionSource.task ;
6972}
7073
@@ -73,20 +76,22 @@ - (BFTask *)findProductsAsync {
7376// /--------------------------------------
7477
7578- (void )productsRequest : (SKProductsRequest *)request didReceiveResponse : (SKProductsResponse *)response {
79+ _productsRequest.delegate = nil ;
80+
7681 PFProductsRequestResult *result = [[PFProductsRequestResult alloc ] initWithProductsResponse: response];
7782 [self .taskCompletionSource trySetResult: result];
7883}
7984
8085- (void )request : (SKRequest *)request didFailWithError : (NSError *)error {
81- [self .taskCompletionSource trySetError: error];
82-
8386 // according to documentation, this method does not call requestDidFinish
84- request.delegate = nil ;
87+ _productsRequest.delegate = nil ;
88+
89+ [self .taskCompletionSource trySetError: error];
8590}
8691
8792- (void )requestDidFinish : (SKRequest *)request {
8893 // the documentation assures that this is the point safe to get rid of the request
89- request .delegate = nil ;
94+ _productsRequest .delegate = nil ;
9095}
9196
9297@end
0 commit comments