首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用StoreKit常量与iOS 9.3/Xcode 7.3一起使用未解析标识符

使用StoreKit常量与iOS 9.3/Xcode 7.3一起使用未解析标识符
EN

Stack Overflow用户
提问于 2016-03-22 14:25:56
回答 3查看 3.1K关注 0票数 8

当尝试使用以下StoreKit常量之一时,我得到了“使用未解析标识符”的错误:

代码语言:javascript
运行
复制
SKErrorClientInvalid
SKErrorPaymentCancelled
SKErrorPaymentInvalid
SKErrorPaymentNotAllowed
SKErrorStoreProductNotAvailable
SKErrorUnknown

代码可能如下所示:

代码语言:javascript
运行
复制
if transaction.error!.code == SKErrorPaymentCancelled {
    print("Transaction Cancelled: \(transaction.error!.localizedDescription)")
}

什么改变了?我需要导入一个新模块吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-22 14:25:56

截至iOS 9.3,某些StoreKit常量已从SDK中删除。有关更改的完整列表,请参见Swift的StoreKit更改

这些常量已被替换成SKErrorCode枚举和相关值:

代码语言:javascript
运行
复制
SKErrorCode.ClientInvalid
SKErrorCode.CloudServiceNetworkConnectionFailed
SKErrorCode.CloudServicePermissionDenied
SKErrorCode.PaymentCancelled
SKErrorCode.PaymentInvalid
SKErrorCode.PaymentNotAllowed
SKErrorCode.StoreProductNotAvailable
SKErrorCode.Unknown

您应该检查您的transaction.error.code和枚举的rawValue。示例:

代码语言:javascript
运行
复制
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)
}

如果使用StoreKit在iOS 9.3和更高版本上创建新应用程序,您应该检查这些错误代码而不是遗留常量。

票数 19
EN

Stack Overflow用户

发布于 2016-03-23 14:02:29

在@JAL应答中添加一个开关变量

代码语言:javascript
运行
复制
        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;
        }
票数 3
EN

Stack Overflow用户

发布于 2016-11-28 02:36:17

以上的答案对我都没有用。解决这个问题的方法是把StoreKit放在SKError的前面。

我的开关看起来是这样的:

代码语言:javascript
运行
复制
switch (transaction.error!.code) {
        case StoreKit.SKErrorCode.Unknown.rawValue:
            print("Unknown error")
            break;
}

不知道为什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36157086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档