无法过渡到2级(使用UINavigationController)

时间:2016-06-18 17:43:50

标签: ios objective-c xcode uinavigationcontroller

在我的GameViewController课程中,我使用此方法displayWinScreen获取当前级别编号,并将其存储在名为WinViewController的{​​{1}}类中的公共属性中。然后它运行这个名为levelCompleted的方法,它只是将runPushAnimationWithController:对象推送到UINavigation堆栈上。

WinViewController

然后在 - (void)displayWinScreen { WinViewController *winViewController = [[WinViewController alloc] initWithNibName:@"WinViewController" bundle:nil]; winViewController.levelCompleted = self.levelNumber; [self runPushAnimationWithController:winViewController]; } 我设置了一个按钮,当按下iPhone时,调用此方法:

WinViewController

}

此方法只会增加该属性值,并将其存储在 -(IBAction)nextLevelSelection:(id)sender { int num = [self.levelCompleted integerValue]; int newNum = num + 2; self.levelCompleted = [NSNumber numberWithInteger:newNum]; GameViewController* nextLevelViewController = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil]; nextLevelViewController.levelNumber = self.levelCompleted; [self runPushAnimationWithController:nextLevelViewController]; 属性GameViewController中。当我设置一个断点来查看是否传递了这个int号时,一切都会检出。如果我最初玩过级别3,那么最终为levelNumber的数字为4.忽略nextLevelViewController.levelNumber,我设置的方式,int值仍然会将级别提高1。

我使用这个为所有其他UINavigationController方法传递int属性的相同过程,一切正常。除此之外。我应该弹出控制器还是使用其他技术进行视图控制器转换?

这是我用来从num + 2返回GameViewController的pop方法。

WinViewController

1 个答案:

答案 0 :(得分:0)

  

我怎样才能从中传递该levelCompleted属性?   WinViewController备份到GameViewController?

一种方法是将它存储到单独的单例类中:

DataModel.h

@interface DataModel : NSObject

@property NSInteger *levelCompleted;

+ (id)sharedModel;

DataModel.m

#import "DataModel.h"

@implementation DataModel

@synthesize levelCompleted;

/* Return singleton model */
+ (id)sharedModel {
    static DataModel *sharedModel = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedModel = [[self alloc] init];
    });
    return sharedModel;
}

- (id)init {
    self = [super init];
    if (self){
         self.levelCompleted = 0;

    return self;
}

然后,您可以在代码中的任何位置调用此类并修改它的属性:

NSInteger levelCompleted = [DataModel sharedModel].levelCompleted;

增加值:

[DataModel sharedModel].levelCompleted+=1;

使用此方法,levelCompleted将仅在应用程序执行的生命周期内持续存在。如果您重新启动设备或关闭应用程序,则该值将丢失。

BUT

如果要在重新启动后保留,则可以将其保存到NSUserDefaults。这将持续应用程序安装的生命周期:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

要检索值:

NSNumber *levelCompleted =[standardUserDefaults objectForKey:@"levelCompleted"];

保存值:

[stadardUserDefaults setObject:levelCompleted forKey:@"levelCompleted"];