在我的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
答案 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"];