2012-11-11 146 views
-3

我希望你能幫我解決我的實際問題:從其他類訪問NSStrings

我用導航控制器設置了一個新項目。對於項目的表格視圖,我添加了一個新的類,名爲「TableViewController.h」和「TableViewController.m」。

在該類別中從來就屬性.ha宣佈爲一個的NSString從其他類訪問它,這樣的:

@property (strong, nonatomic) NSString *testString; 

在.M從來就合成它如下:

@synthesize testString; 

現在我設置在 - (無效)的tableView:(UITableView的*)的tableView didSelectRowAtIndexPath方法:(NSIndexPath *)表視圖控制器indexPath-方法如下:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    testString = @"Hello, World!"; 
    } 

現在爲下一個視圖創建一個新的UIViewController類,當我點擊一個單元格時(所有工作到目前爲止),它應該會出現。在這個名爲「SecondView」的UIViewController中,我導入了TableViewController的.h文件。 而且我有這樣的代碼在SecondView.m:

-(void) viewDidLoad 
    { 
    [super viewDidLoad]; 
    TableViewController *demoObject = [TableViewController alloc] init] 
    NSLog (@"Teststring is: %@" [demoObject.testString]); 
    } 

現在,當我啓動模擬器我得到這樣的輸出: 的TestString是:(空)

當我的NSLog將TestString在TableViewController我得到「你好,世界「,但爲什麼不是」轉移「到SecondView類並生成所需的輸出?

+2

請理解面向對象編程。做'[[TableViewController alloc] init]'創建一個新類的實例,這個類與你之前創建的類的任何其他實例完全分離。因此,以前創建的實例中設置的任何值都將無法從新實例訪問。 –

+0

哦,親愛的,你是對的!這是一個正確的方向,謝謝! –

回答

4

您正在記錄viewDidLoad中的字符串,該字符串在表視圖的didSelectRow方法中設置之前被調用很久。您還應該使用self.testString = ...

+0

+1。這個。您創建該表然後立即記錄該字符串。在視圖加載之前,用戶如何選擇一個單元格並將字符串設置爲某些內容? xD – Metabble

+0

第二個代碼片似乎是他的第二個視圖控制器 –

+0

......我認爲問題在於他寫的令人困惑的方式。 :p – Metabble

0

您如何期待數據「轉移」?你必須吧..在的tableView:didSelectCellAt:行(這裏你推第二視圖),你不得不說:

2ndView.testString = self.testString;