2012-10-29 37 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」 行動

相關問題