2016-03-22 15 views
8

tôi nhận được lỗi "Sử dụng định danh chưa được giải quyết" khi cố gắng sử dụng một trong các hằng StoreKit:Sử dụng định danh chưa được giải quyết khi sử dụng hằng StoreKit với iOS 9.3/Xcode 7.3

SKErrorClientInvalid 
SKErrorPaymentCancelled 
SKErrorPaymentInvalid 
SKErrorPaymentNotAllowed 
SKErrorStoreProductNotAvailable 
SKErrorUnknown 

Mã của bạn có thể trông như thế này :

if transaction.error!.code == SKErrorPaymentCancelled { 
    print("Transaction Cancelled: \(transaction.error!.localizedDescription)") 
} 

Điều gì đã thay đổi? Tôi có cần nhập mô-đun mới không?

Trả lời

18

Kể từ iOS 9.3 một số hằng số StoreKit nhất định đã bị xóa khỏi SDK. Xem StoreKit Changes for Swift để biết danh sách đầy đủ các thay đổi.

Những hằng số đã được thay thế có lợi cho SKErrorCode enum và liên quan đến các giá trị:

SKErrorCode.ClientInvalid 
SKErrorCode.CloudServiceNetworkConnectionFailed 
SKErrorCode.CloudServicePermissionDenied 
SKErrorCode.PaymentCancelled 
SKErrorCode.PaymentInvalid 
SKErrorCode.PaymentNotAllowed 
SKErrorCode.StoreProductNotAvailable 
SKErrorCode.Unknown 

Bạn nên kiểm tra được kiểm tra của bạn transaction.error.code với của rawValue enum. Ví dụ:

private func failedTransaction(transaction: SKPaymentTransaction) { 
    print("failedTransaction...") 
    if transaction.error?.code == SKErrorCode.PaymentCancelled.rawValue { 
     print("Transaction Cancelled: \(transaction.error?.localizedDescription)") 
    } 
    else { 
     print("Transaction Error: \(transaction.error?.localizedDescription)") 
    } 
    SKPaymentQueue.defaultQueue().finishTransaction(transaction) 
} 

Bạn nên kiểm tra mã lỗi này thay vì hằng số cũ nếu tạo ứng dụng mới bằng StoreKit trên iOS 9.3 trở lên.

+0

"Bạn nên kiểm tra giao dịch của mình.chuyển đổi với một trong các giá trị này" tôi không nghĩ điều đó có thể xảy ra. SKErrorCode không phải là một NSError. Chỉ .code chống lại .rawValue làm việc cho tôi. –

+1

@ AceGreen cảm ơn tôi sẽ chỉnh sửa. Vì vậy, điều này làm việc cho bạn? 'if transaction.error? .code == SKErrorCode.PaymentCancelled.rawValue {...}' – JAL

+0

Tôi sử dụng câu lệnh switch nhưng có .code chống lại .rawValue hoạt động (Xem trả lời dưới đây) –

3

Thêm vào @JAL câu trả lời heres một biến thể chuyển đổi

 switch (transaction.error!.code) { 
     case SKErrorCode.Unknown.rawValue: 
      print("Unknown error") 
      break; 
     case SKErrorCode.ClientInvalid.rawValue: 
      print("Client Not Allowed To issue Request") 
      break; 
     case SKErrorCode.PaymentCancelled.rawValue: 
      print("User Cancelled Request") 
      break; 
     case SKErrorCode.PaymentInvalid.rawValue: 
      print("Purchase Identifier Invalid") 
      break; 
     case SKErrorCode.PaymentNotAllowed.rawValue: 
      print("Device Not Allowed To Make Payment") 
      break; 
     default: 
      break; 
     } 
0

Không ai trong số các câu trả lời ở trên làm việc cho tôi. Điều gì đã giải quyết được trước đó là StoreKit tới SKError.

tắc của tôi trông như thế này:

switch (transaction.error!.code) { 
     case StoreKit.SKErrorCode.Unknown.rawValue: 
      print("Unknown error") 
      break; 
} 

Không biết tại sao.

+0

Lỗi bạn nhận được khi chỉ tham chiếu cấu trúc 'SKErrorCode' là gì? Có vẻ như bạn có một xung đột không gian tên. – JAL

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