ios - [AppCommons respondsToSelector :]: message sent to deallocated instance

标签 ios objective-c in-app-purchase

AppCommons.h

#import <Foundation/Foundation.h>
#import <StoreKit/StoreKit.h>

@interface AppCommons : NSObject <SKProductsRequestDelegate,SKRequestDelegate>
- (void) getInAppPrice : (NSString *) inAppIdentifier;
@end

AppCommons.m

#import "Config.h"
#import "AppCommons.h"
#import "AppDelegate.h"
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"


@implementation AppCommons
SKProductsRequest *productsRequest;


- (void) getInAppPrice : (NSString *) inAppIdentifier {
    NSSet *productIdentifiers = [NSSet setWithObject:inAppIdentifier ];
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    productsRequest.delegate = self;
    [productsRequest start];

    // we will release the request object in the delegate callback
}

#pragma mark -
#pragma mark SKProductsRequestDelegate methods

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    for(SKProduct *product in response.products)
    {
        NSLog(@"Product Price : %@",product.price);
                NSLog(@"Product Price Locale : %@",product.priceLocale);
    }
}

@end

这是我的类,用于获取应用内购买的费用。我正在使用以下行从另一个类调用 getInAppPrice 方法

AppCommons *appCommon = [[AppCommons alloc] init];
[appCommon getInAppPrice:inAppProductIdentifier];

收到响应后出现以下错误

"* -[AppCommons respondsToSelector:]: 发送到释放实例 0xd4f0580 的消息

请帮忙..谢谢。

最佳答案

我怀疑你是在一个方法的范围内这样做的,就像这样:

- (void)myMethod {
    AppCommons *appCommon = [[AppCommons alloc] init];
    [appCommon getInAppPrice:inAppProductIdentifier];
}

这意味着 appCommon 将在方法返回时被销毁。

而是创建一个实例变量或属性,以便 AppCommons 对象的生命周期超过此方法调用。

我的类.h:

@class AppCommons;
@interface MyClass : NSObject {
    AppCommons *_appCommons;
}
...
@end

我的类.m:

#import "MyClass.h"
#import "AppCommons.h"

@implementation MyClass

- (id)init {
    self = [super init];
    if (self) {
        _appCommons = [[AppCommons alloc] init];
    }
    return self;
}

- (void)myMethod {
    [_appCommons getInAppPrice:inAppProductIdentifier];
}

@end

关于ios - [AppCommons respondsToSelector :]: message sent to deallocated instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384592/

相关文章:

ios - IAP 被拒绝,因为未提交所需的二进制文件问题

ios - 通过添加信用卡/paypal测试iOS自动续订订阅功能

ios - 使用更新的框架解析在 iOS 9 构建中损坏的推送通知

ios - 当 TextField 显示时获取 UIKeyboard 高度

ios - 测试安装路径的 Firebase 深度链接

ios - 如何使用 HyprMX

windows-phone-8 - Windows Phone 8 应用程序中的应用程序内购买是否有限制?

ios - UITextView 最多 4 行且总共 140 个字符

ios - 获取音频持续时间字符串的浮点值

ios - 在ios7中用日期对NSMutableArray进行排序