2012-10-29 40 views
0

我刚刚在SBSettingsViewController中创建了一个NSString变量,我想在我的SBViewController中获取它。获取空值(在ViewController之间传递数据)

我知道......对此有很多回应,但我真的不知道自己做错了什么。我只是用这个(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); 
} 
+0

我猜你不需要在实现文件 –

+0

Roozbeh写空接口定义它不是问题。它是由最新版本的xcode生成的。 –

+0

你在哪里得到空值? –

回答

0

据我了解,你的SBSettingsViewController可以在SBViewController之前创建,所以,将你的属性移动到应用程序委托并访问类似的东西是个不错的主意

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

无论如何,我认为你需要更可靠的东西来使它工作,就像你的控制器可以访问你的游戏设置。但我想应用程序委托属性是足够的第一次尝试。

0

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

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

,地方与你exsisting SBViewController对象初始化你的TabBarController里面,然后在你的selectModeFlat,你将能够设置其属性gameMode与像

self.sbViewController.gameMode = @"Something" 
+0

抱歉,但没有工作...仍然得到空值。检查了这一点 ..它正在尝试做什么http://cl.ly/KYc6 –

+0

据我所知,你的'SBSettingsViewController'可以在'SBViewController'之前创建,所以,这可能是一件好事想法将你的属性移动到应用程序委托并访问类似的东西'MyApplicationDelegate * appDelegate =(MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.gameMode = @“Something”;' –

+0

谢谢@MarkPervovskiy ...它适用于此解决方案。如果你想要,你可以写一个回应,然后我检查它的权利!再次感谢! –

0

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

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

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

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” 行动

相关问题