我有两个视图控制器,一个以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,如何解决?
最佳答案
每次选择一个播放器/两个播放器等时,您都在分配一个新的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等的IBAction:
- (IBAction)onePlayer:(id)sender {
_players = 1;
NSLog(@"%i", _players);
}
然后在PageMainViewController.m中导入PlayerSelectViewController
#import "PlayerSelectViewController.h"
最后,像这样更新IBAction选择按钮:
- (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];
}
}
关于ios - 获取相同的整数实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25069920/