我正在按照教程向我的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}}:/
答案 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];
}