我有两个视图控制器,一个名称为PageMainViewController,另一个名称为PlayerSelectViewController。在PageMainViewController的.h文件中声明了一个名为players
的整数,该整数将用于表示正在播放的人数。整数在PlayerSelectViewController的.m文件中设置,具体取决于击中的按钮。
PageMainViewController.h:
#import <UIKit/UIKit.h>
@interface PageMainViewController : UIViewController
- (IBAction)chooseButton:(id)sender;
@property int players;
@end
PageMainViewController.m:
#import "PageMainViewController.h"
@interface PageMainViewController ()
@end
@implementation PageMainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)chooseButton:(id)sender {
NSLog(@"Final = %i", _players);
if (_players == 1) {
OnePlayerViewController *onePlayerViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OnePlayerViewController"];
[self presentViewController:onePlayerViewController animated:YES completion:nil];
}
if (_players == 2) {
TwoPlayersViewController *twoPlayersViewsController = [self.storyboard instantiateViewControllerWithIdentifier:@"TwoPlayersViewController"];
[self presentViewController:twoPlayersViewController animated:YES completion:nil];
}
if (_players == 3) {
ThreePlayersViewController *threePlayersViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ThreePlayersViewController"];
[self presentViewController:theePlayersViewController animated:YES completion:nil];
}
if (_players == 4) {
FourPlayersViewController *fourPlayersViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FourPlayersViewController"];
[self presentViewController:fourPlayersViewController animated:YES completion:nil];
}
}
PlayerSelectViewController.h:
#import <UIKit/UIKit.h>
#import "PageMainViewController.h"
@interface PlayerSelectViewController : UIViewController
- (IBAction)onePlayer:(id)sender;
- (IBAction)twoPlayers:(id)sender;
- (IBAction)threePlayers:(id)sender;
- (IBAction)fourPlayers:(id)sender;
@end
PlayerSelectViewController.m:
#import "PlayerSelectViewController.h"
@implementation PlayerSelectViewController
- (IBAction)onePlayer:(id)sender {
PageMainViewController *pageMainViewController = [[PageMainViewController alloc] init];
pageMainViewController.players = 1;
NSLog(@"%i", pageMainViewController.players);
}
- (IBAction)twoPlayers:(id)sender {
PageMainViewController *pageMainViewController = [[PageMainViewController alloc] init];
pageMainViewController.players = 2;
NSLog(@"%i", pageMainViewController.players);
}
- (IBAction)threePlayers:(id)sender {
PageMainViewController *pageMainViewController = [[PageMainViewController alloc] init];
pageMainViewController.players = 3;
NSLog(@"%i", pageMainViewController.players);
}
- (IBAction)fourPlayers:(id)sender {
PageMainViewController *pageMainViewController = [[PageMainViewController alloc] init];
pageMainViewController.players = 4;
NSLog(@"%i", pageMainViewController.players);
}
@end
的NSLog:
1
Final = 0
整数从1重置为0,如何解决?
答案 0 :(得分:1)
我认为问题在于您在按钮操作方法中实例化PageMainViewController。当您呈现PageMainViewController时,您将使用此类的另一个实例。
尝试将pageMainViewController声明为PlayerSelectViewController类的属性,在PlayerSelectViewController的viewDidLoad上调用init方法,并继续在按钮的action方法上设置整数。
类似的东西:
#import "PlayerSelectViewController.h"
@interface PlayerSelectViewController ()
@property (nonatomic, strong) PageMainViewController *pageMainViewController;
@end
@implementation PlayerSelectViewController
- (void)viewDidLoad {
self.pageMainViewController = [[PageMainViewController alloc] init];
}
- (IBAction)onePlayer:(id)sender {
self.pageMainViewController.players = 1;
NSLog(@"%i", pageMainViewController.players);
}
- (IBAction)twoPlayers:(id)sender {
self.pageMainViewController.players = 2;
NSLog(@"%i", pageMainViewController.players);
}
- (IBAction)threePlayers:(id)sender {
self.pageMainViewController.players = 3;
NSLog(@"%i", pageMainViewController.players);
}
- (IBAction)fourPlayers:(id)sender {
self.pageMainViewController.players = 4;
NSLog(@"%i", pageMainViewController.players);
}
@end
答案 1 :(得分:1)
每次选择onePlayer / 2等时,您都会分配一个新的PageMainViewController实例,因此它不再引用您的PageMainViewController的初始实例。
如果PageMainViewController呈现PlayerSelectViewController,您可以通过更改每个IBAction来引用原始viewController,如下所示:
- (IBAction)onePlayer:(id)sender {
PageMainViewController *pageMainViewController = (PageMainViewController*)[self presentingViewController];
pageMainViewController.players = 1;
NSLog(@"%i", pageMainViewController.players);
}
编辑:随着您附加的新图片,PlayerSelectViewController将呈现PageMainViewController。你可以这样做:
首先,将玩家ivar移动到PlayerSlectViewController,如下所示:
#import <UIKit/UIKit.h>
@interface PlayerSelectViewController : UIViewController
- (IBAction)onePlayer:(id)sender;
- (IBAction)twoPlayers:(id)sender;
- (IBAction)threePlayers:(id)sender;
- (IBAction)fourPlayers:(id)sender;
@property int players;
@end
删除PageMainViewController .h文件中的那个
接下来更新onePlayer,twoPlayer等的IBActions,如下所示:
- (IBAction)onePlayer:(id)sender {
_players = 1;
NSLog(@"%i", _players);
}
然后在PageMainViewController.m中导入PlayerSelectViewController
#import "PlayerSelectViewController.h"
最后,像这样更新IBAction chooseButton:
- (IBAction)chooseButton:(id)sender {
PlayerSelectViewController* presentingVC = (PlayerSelectViewController*)[self presentingViewController];
NSLog(@"Final = %i", presentingVC.players);
if (presentingVC.players == 1) {
OnePlayerViewController *onePlayerViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OnePlayerViewController"];
[self presentViewController:onePlayerViewController animated:YES completion:nil];
}
if (presentingVC.players == 2) {
TwoPlayersViewController *twoPlayersViewsController = [self.storyboard instantiateViewControllerWithIdentifier:@"TwoPlayersViewController"];
[self presentViewController:twoPlayersViewController animated:YES completion:nil];
}
if (presentingVC.players == 3) {
ThreePlayersViewController *threePlayersViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ThreePlayersViewController"];
[self presentViewController:theePlayersViewController animated:YES completion:nil];
}
if (presentingVC.players == 4) {
FourPlayersViewController *fourPlayersViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FourPlayersViewController"];
[self presentViewController:fourPlayersViewController animated:YES completion:nil];
}
}