2016-03-22 9 views
8

をStoreKit定数を使用するときに、これらのStoreKit定数のいずれかを使用しようとしたとき、私はエラー「未解決識別子の使用」を取得:使用のiOS 9.3/Xcodeので7.3

SKErrorClientInvalid 
SKErrorPaymentCancelled 
SKErrorPaymentInvalid 
SKErrorPaymentNotAllowed 
SKErrorStoreProductNotAvailable 
SKErrorUnknown 

あなたのコードは次のように見えるかもしれ:

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

何が変更されましたか?インポートする必要がある新しいモジュールはありますか?

答えて

18

iOS 9.3以降、特定のStoreKit定数がSDKから削除されました。変更の完全なリストについては、StoreKit Changes for Swiftを参照してください。

これらの定数はSKErrorCode列挙し、関連する値の賛成で置き換えられています

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

あなたがチェックすることを確認する必要があり、あなたとtransaction.error.code enumのrawValue。例:

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) 
} 

あなたはiOSの9.3以上にStoreKitを使用して新しいアプリケーションを作成する場合、これらのエラーコードではなく、従来の定数と照合しなければなりません。

+0

"これらの値のいずれかを使用してtransaction.errorをチェックすることを確認する必要があります。"可能性はありません。 SKErrorCodeはNSErrorではありません。 .rawValueに対してのみ.codeは私のために働く。 –

+1

@AceGreenありがとう私は編集を行います。これはあなたのために働く? 'if transaction.error?.code == SKErrorCode.PaymentCancelled.rawValue {...}' – JAL

+0

switch文を使用しますが、.rawValueに対して.codeを使用します(下の回答を参照)。 –

3

HERESに上記の回答のスイッチバリアント

 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

なし私のために働いていない@JAL答えに追加します。それを解決したのは、SKErrorにStoreKitを追加することでした。なぜ

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

ないアイデア:

私のスイッチは、このようなものを見ました。

+0

'SKErrorCode'構造体を参照するときに得たエラーは何でしたか?名前空間の衝突があるようです。 – JAL

関連する問題