小编Mar*_*cin的帖子

iPhone - SKProductsRequest和"发送到解除分配的实例的消息"

我在实施InAppPurchase方面遇到了麻烦.我的购买实现是在模态视图控制器(AppUpgradeViewController)中,我从另一个模态视图中呈现.我是这样做的:

AppUpgradeViewController * appUpgradeViewController = [[AppUpgradeViewController alloc] init];
appUpgradeViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
appUpgradeViewController.delegate = self;
[self presentModalViewController:appUpgradeViewController animated:YES];
[appUpgradeViewController release];
Run Code Online (Sandbox Code Playgroud)

然后,在我的升级视图中,我执行以下操作:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
NSSet *productIdentifiers = [NSSet setWithObject:kInAppPurchaseProUpgradeProductId];
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
self.productsRequest.delegate = self;
[productsRequest start];
Run Code Online (Sandbox Code Playgroud)

然后我实施了

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
Run Code Online (Sandbox Code Playgroud)

我在哪里:

[self.productsRequest release];
Run Code Online (Sandbox Code Playgroud)

然后我有其他所需的方法.

问题是当我显示模态时,并迅速解除它然后几秒后我在控制台上得到以下内容(我打开NSZombieEnabled):

*** -[AppUpgradeViewController respondsToSelector:]: message sent to deallocated instance 0x2e91f0
Run Code Online (Sandbox Code Playgroud)

我想这是产品请求的内容,但我不知道如何调试或修复它.似乎请求的答案是在它被解除(并且已经解除分配)之后才到达该控制器,但我不知道如何阻止它在解除/ dealloc之后接收消息.谢谢你的帮助!

iphone

5
推荐指数
2
解决办法
4762
查看次数

iPhone - modalViewController版本

我试图找到释放模态视图控制器的正确方法.

基本上,我有视图控制器,按下按钮后显示模态视图(全屏).

TipViewController * tipViewController = [[TipViewController alloc] init];
tipViewController.delegate = self;
[self presentModalViewController:tipViewController animated:YES];   
Run Code Online (Sandbox Code Playgroud)

然后,在模态视图中应该被解雇时我打电话给:

[self.delegate didDismissModalView];
Run Code Online (Sandbox Code Playgroud)

最后,父控制器的didDissmissModalView方法如下:

- (void)didDismissModalView 
{
    // dismiss the modal view controller
    [self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

(我使用ModalViewControllerDelegate协议,这需要实现该方法).

首先我认为我应该在父控制器的dealloc方法中释放tipViewController:

- (void)dealloc 
{
    [tipViewController release];
}
Run Code Online (Sandbox Code Playgroud)

但后来我看到,它可能是错误的方式,因为模态视图控制器可能会在父控制器关闭之前多次呈现和解除,并且每次它将被分配但最终只被释放一次.

那么也许我应该在呈现之后发布tipViewController?

TipViewController * tipViewController = [[TipViewController alloc] init];
tipViewController.delegate = self;
[self presentModalViewController:tipViewController animated:YES];
[tipViewController release];
Run Code Online (Sandbox Code Playgroud)

我可以这样做,虽然现在显示模态视图?

或许我应该以这种方式发布模态视图:

- (void)didDismissModalView 
{
// dismiss the modal view controller
    [self dismissModalViewControllerAnimated:YES];
    [self.modalViewController release];
}
Run Code Online (Sandbox Code Playgroud)

假设self.modalViewController现在与tipViewController相同?

iphone release modalviewcontroller

0
推荐指数
1
解决办法
1088
查看次数

标签 统计

iphone ×2

modalviewcontroller ×1

release ×1