pushViewController没有做任何事情(以下IAP教程)

时间:2014-05-14 05:04:48

标签: ios objective-c ios7 in-app-purchase pushviewcontroller

我正在按照教程向我的iOS应用添加应用内购买(此处为参考教程:http://www.techotopia.com/index.php/An_iOS_7_In-App_Purchase_Tutorial)但我有一个问题我似乎无法找到解决方案。

使用[nav pushViewController:_purchaseController animated:YES];时,没有任何反应:视图保持不变,屏幕上没有任何反应。方法中的其余代码似乎没有太多问题,但在此之前必定存在问题,我认为这与_purchaseController有关,因为它似乎所有关于它的内容都是零。

self.navigationController还有一个问题是nil,所以我用nav替换了它,它被声明为UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self];之前的行。所以也许这里也存在一个问题,我不太确定。

以下是相关代码:

ViewController.h

#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
#import "ViewControllerPurchase.h"
#import "ViewControllerPlay.h"
#import "ViewControllerWon.h"

@interface ViewController : UIViewController

@property (nonatomic) ViewControllerPurchase *purchaseController;

- (IBAction) unwind:(UIStoryboardSegue *)unwindSegue;
- (IBAction) openReviewApp:(id)sender;
- (IBAction) purchaseIncreaseCap:(id)sender;

- (void) increaseAttemptCap;

@end

ViewController.m (从它开始,休息不相关)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    _purchaseController = [[ViewControllerPurchase alloc] init];

    [[SKPaymentQueue defaultQueue] addTransactionObserver:_purchaseController];
}

- (IBAction)purchaseIncreaseCap:(id)sender
{
    NSLog(@"Clicked increase button");

    _purchaseController.productID = @"MM3X3IAC099";

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self];

    [nav pushViewController:_purchaseController animated:YES];

    [_purchaseController getProductInfo: self];
}

这是我第一次在我的项目中使用过.xib文件,因为我对所有这些都很新,所以这可能只是一个非常简单的错误,但我可以&#39;即使经过相当多的研究,似乎也发现了它。希望你们中的一些人能够善意地指出我做错了什么,或者引用我一些可以帮助我解决这个问题的事情。

修改

将NavigationController添加到购买按钮所在的ViewController后,self.navigationController可以正常工作,但它仍然没有显示任何内容。在[self.navigationController pushViewController:_purchaseController animated:YES];屏幕上没有任何变化后,它永远不会到达&#34; viewDidLoad&#34; ViewControllerPurchase上的0x2e5b9c6e: trap和应用程序崩溃,Thread 1: EXC_ARM_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe)错误{{1}}:/

3 个答案:

答案 0 :(得分:2)

在最简单的设置中,您正在推送的视图控制器(代码中定义为ViewController的类)包含在导航控制器中。

然后你的第一次尝试,self.navigationController将正常工作。只是做:

[self.navigationController pushViewController:_purchaseController animated:YES];

但是因为self.navigationController == nil,这意味着ViewController实例不包含在导航控制器中。您可以在故事板或代码中执行此操作。您可能需要在问题中发布更多关于如何设置 视图控制器的信息。

在更不寻常的设置中,您可能会在导航控制器未包含的vc上方显示导航控制器。这看起来像这样(但除非你确定它是你的意思,否则不要这样做):

// note the different root
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:_purchaseController];

// note the present, not push
[self presentViewController:_purchaseController animated:YES];

答案 1 :(得分:1)

为此在你的故事板中,选择你必须导航的viewController,现在转到编辑器 - &gt;嵌入 - &gt;导航控制器。

此外,您现在可以删除按钮操作中用于制作导航控制器的代码。

试试这段代码:

yourViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerId"];
    [self.navigationController pushViewController:VC animated:YES];

答案 2 :(得分:0)

就这样做:

  - (IBAction)purchaseIncreaseCap:(id)sender
  {
     NSLog(@"Clicked increase button");

    _purchaseController.productID = @"MM3X3IAC099";

    [self.navigationController pushViewController:_purchaseController animated:YES];
    [_purchaseController getProductInfo: self];
  }