获取Null(在ViewController之间传递数据)

时间:2012-10-29 20:34:56

标签: iphone ios string

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

我知道..有很多关于此的回复,但我真的不知道我做错了什么。我只是使用这个获得一个(null)值。

谢谢!

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 个答案:

答案 0 :(得分:0)

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

@property (assign, nonatomic) SBViewController *sbViewController;
SBSettingsViewController中的

,使用你的TabBarController中的某个现有的SBViewController对象初始化它,然后在你的selectModeFlat中,你可以用{/ p}之类的东西设置它的属性gameMode >

self.sbViewController.gameMode = @"Something"

答案 1 :(得分:0)

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

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

原因是sbView是一个局部变量 - 它的范围只是在方法结束之前。当ARC到达结束}时,ARC将删除创建的SBViewController。

答案 2 :(得分:0)

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

它新创建SBViewController,SBViewController在SBSettingsViewController之前运行,你在创建“sbView”之后调用action

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

它回忆起“geraManobra”行动

答案 3 :(得分:0)

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

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

无论如何,我认为你需要一些更可靠的东西来使它工作,就像一个对象,你的游戏设置可以从你的控制器访问。但我想第一次尝试app delegate属性就足够了。