0

我刚刚在 SBSettingsViewController 中创建了一个 NSString 变量,我想在我的 SBViewController 中获取它。

我知道..对此有很多回应,但我真的不知道我做错了什么。我只是使用它获得一个(空)值。

谢谢!

SBViewController.h:

#import <UIKit/UIKit.h>

@interface SBViewController : UIViewController {
    NSString *gameMode;
}

@property (retain, nonatomic) NSString *gameMode;

- (IBAction)geraManobra;

SBViewController.m

#import "AppDelegate.h"
#import "SBViewController.h"
#import "SBSettingsViewController.h"

@interface SBViewController ()

@end

@implementation SBViewController

@synthesize gameMode;

- (IBAction)geraManobra {
    NSLog(@" %@",gameMode);
}

SBSettingsViewController.h

#import <UIKit/UIKit.h>
#import <FacebookSDK/FacebookSDK.h>

@interface SBSettingsViewController : UITableViewController

- (IBAction)selectModeFlat;

SBSettingsViewController.m

#import "AppDelegate.h"
#import "SBSettingsViewController.h"
#import "SBViewController.h"

@interface SBSettingsViewController ()

@end

@implementation SBSettingsViewController

- (IBAction)selectModeFlat {
    SBViewController *sbView = [[SBViewController alloc] init];
    sbView.gameMode = @"Flat Ground";
    NSLog(@" %@",sbView.gameMode);
}
4

4 回答 4

0

我想最简单的方法是创建一个属性

@property (assign, nonatomic) SBViewController *sbViewController;

在中SBSettingsViewController,使用 TabBarController 内某处的现有 SBViewController 对象对其进行初始化,然后在您的中,selectModeFlat您将能够gameMode使用类似的东西设置其属性

self.sbViewController.gameMode = @"Something"
于 2012-10-29T22:39:16.853 回答
0

以下方法没有效果(除了浪费时间):

- (IBAction)selectModeFlat {
    SBViewController *sbView = [[SBViewController alloc] init];
    sbView.gameMode = @"Flat Ground";
    NSLog(@" %@",sbView.gameMode);
}

原因是它sbView是一个局部变量——它的作用域只到方法结束。ARC 将在关闭时删除创建的 SBViewController }

于 2012-10-30T03:01:11.230 回答
0
- (IBAction)selectModeFlat {
    SBViewController *sbView = [[SBViewController alloc] init];
    sbView.gameMode = @"Flat Ground";
    NSLog(@" %@",sbView.gameMode);
}

它新创建 SBViewController,SBViewController 在 SBSettingsViewController 之前运行,您在创建“sbView”后调用操作

- (IBAction)selectModeFlat {
    SBViewController *sbView = [[SBViewController alloc] init];
    sbView.gameMode = @"Flat Ground";
   [self sbView.geraManobra];
}

它让人想起“geraManobra”动作

于 2012-10-30T04:37:52.550 回答
0

据我了解,您的 SBSettingsViewController 可以在 SBViewController 之前创建,因此,将您的属性移动到应用程序委托并使用类似的东西访问可能是个好主意

MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.gameMode = @"Something";

无论如何,我认为你需要一些更可靠的东西才能让它工作,比如一个可以从你的控制器访问你的游戏设置的对象。但我想第一次尝试应用程序委托属性就足够了。

于 2012-10-30T11:35:18.617 回答