PageMainViewController

PageMainViewController

我有两个视图控制器,一个以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/

10-13 08:41