2013-05-14 35 views
5

Tôi sử dụng trong ứng dụng của mình là SKStoreProductViewController. Nó hiển thị chính xác, nhưng với một vài giây chậm trễ, làm chậm trải nghiệm người dùng.SKStoreProductViewController hiển thị với độ trễ

Có điều gì sai trong mã của tôi không? Hoặc tôi có nên thông báo cho người dùng rằng VC đang tải không? Bởi vì ngay bây giờ người ta có thể tin rằng không có gì đang xảy ra sau khi nhấn nút (mà gây nên các mã sau):

-(void)launchApp:(id)sender { 

    // Recall on main thread if necessary 
    if (![NSThread isMainThread]) { 
     [self performSelectorOnMainThread:@selector(launchApp:) 
           withObject:sender 
          waitUntilDone:NO]; 
     return; 
    } 

    // Initialize Product View Controller 
    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init]; 

    // Configure View Controller 
    [storeProductViewController setDelegate:self]; 
    [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"*********"} 
              completionBlock:^(BOOL result, NSError *error) { 
     if (error) { 
      NSLog(@"Error %@ with User Info %@.", error, [error userInfo]); 
     } else { 
      // Present Store Product View Controller 
      [self presentViewController:storeProductViewController animated:YES completion:nil]; 
     } 
    }]; 
} 

Trả lời

27

Việc chậm trễ là do bởi vì bạn trình bày các viewController sau khi sản phẩm đã được nạp sucesfully.

Bạn có thể thực hiện cuộc gọi presentViewController:animated:completion: bên ngoài khối được gọi sau khi sản phẩm đã được tải. Trong trường hợp này bộ điều khiển sẽ được hiển thị trống, và nó được lấp đầy sau khi các sản phẩm đã được tải.

cái gì đó dọc những dòng:

SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init]; 

// Configure View Controller 
[storeProductViewController setDelegate:self]; 
[storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @364709193} 
             completionBlock:^(BOOL result, NSError *error) { 
    if (error) { 
     NSLog(@"Error %@ with User Info %@.", error, [error userInfo]); 
    } else { 

    } 
}]; 
// Present Store Product View Controller 
[self presentViewController:storeProductViewController animated:YES completion:nil]; 

Hoặc bạn có thể tạo ra một "cửa sổ bật lên" quan điểm đó cho thấy một chỉ số hoạt động trong khi bộ điều khiển nạp nội dung của nó.

Hoặc bạn sử dụng [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

Có một số cách để xử lý việc này.

+0

Cảm ơn, tôi đã quên mất một giây lý do đằng sau các khối .. Tôi đã sử dụng giải pháp đầu tiên và tốt, vì VC có nhãn "tải" riêng. Cảm ơn ! – rdurand

+0

@Matthias - bất kỳ ý tưởng nào nếu có thể lập thời gian chờ cũng cho cuộc gọi loadProductWithParameters? – runamok

+1

Một lưu ý - Apple cho biết bạn nên chuyển mã định danh cửa hàng của mình dưới dạng NSNumber thay vì NSString. – Zack

Các vấn đề liên quan