获取整数的相同实例

时间:2014-07-31 22:23:41

标签: ios objective-c variables

我有两个视图控制器,一个名称为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,如何解决?

Screenshot

2 个答案:

答案 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];

    }

}