2012-03-31 57 views
-1

我一直在尋找解決方案,以便如何將值從一個類傳遞到另一個類。基本上我通過@property在Settings類中創建一個NSString,它以模態方式顯示。然後根據所選的設置將NSString設置爲某個值,並且我希望在設置應該進行更改的類中顯示值。我也通過第二類@財產申報一個字符串,我在第二類中使用代碼在類之間傳遞NSString值

myController *controller = [[myController alloc] init]; 
secondClassString = controller.firstClassString 

如果我的NSLog字符串,它顯示(空)... 任何想法如何使它傳遞價值?由於

+0

你需要谷歌它 – 2012-03-31 08:23:37

+0

我知道如何傳遞數組,做了很多次,我googling我的情況幾個小時,但我發現沒有工作的解決方案如何傳遞一個NSString值 – 2012-03-31 08:27:08

回答

3

假設您將兩個viewcontrollers說一個 &

你A.​​H

{ 
    NSString *strData; 
    int cId; 
} 

@property (nonatomic, retain) NSString *strData; 
@property (readwrite) int cId; 

現在在你時三十分

@synthesize strData,cId; 

你B.h

@class A 

{ 
    A *aObj; 
} 

現在在你B.m

#import "A.h" 

- (void) viewDidLoad 
{ 
    aObj=[A alloc] init]; //alloc object of A 
    [aObj setCId:10]; //set value for cId 
    [aObj setStrData:@"Hello from B"]; //set value for strData 
    //do what ever 
    [aObj release]; //don't forget 
} 

希望這可以幫助你!

+0

您不應該發表回答這只是鏈接。 – yuji 2012-03-31 08:07:11

+0

@yuji,我想我可以爲SO節省一些空間。我發佈了我的答案。 – Hemang 2012-03-31 08:09:30

+0

完美,我只是不太明白cId是什麼。 – 2012-03-31 08:18:06

0

也許這會幫助你

寫這Firstclass.m文件

SecondView *ObjSecondView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil]; 

objSecondView.secondClassString=Firstclassstring; 
[self.navigationController pushViewController:ObjSecondView animated:YES]; 
[ObjSecondView release]; 

在SecondView.h

@property(nonatomic,retain)NSString *secondClassString; 
//also synthesize this 

然後打印secondview的viewDidLoad方法

-(void)viewDidLoad 
{ 
NSLog(@"your string = %@",secondClassString); 
} 
-1

讓我們使用兩個viewControllers的名稱作爲FirstViewController和SecondViewController。

現在假設你從FirstViewController點擊一個按鈕推SecondViewController那麼你需要你的按鈕單擊事件下編寫代碼:

// In the FirstViewController 

- (void)buttonClicked:(id)sender{ 

    SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle: nil]; 
second.secString = firstString; 
[self.navigationController pushViewController:second animated:YES]; 
[second release]; 

} 

在這裏,您需要在SecondViewController.h文件中聲明:

NSString *secString; 

然後創建一個@property

@property (non atomic,strong) NSString *secString; 

SecondViewController.m你需要@synthesizesecString

@synthesize secString; 

因此這種方式,您也能夠通過創造財產和合成它創造secString getter和setter。

現在您可以輕鬆訪問secString,您可以在SecondViewController中的任何位置使用它。

只是爲了檢查嘗試,並檢查是否firstString的值傳遞給secString,寫viewWillAppear:SecondViewController

NSLog(@"secString: %@",secString); 

讓我知道如果你需要更多的幫助,下面的代碼。

希望這會有所幫助。

+0

其實它有點複雜...我有一個導航控制器的UITableView。在第一個視圖中有一個條形按鈕,用於模態顯示設置,在按下保存解除後按鈕。然後,我必須瀏覽導航控制器才能看到需要將值傳遞給的視圖。 – 2012-03-31 08:46:36

+0

@DenisBalko:對不起,但我沒有得到流量。你可以在你的問題上張貼你觀點的屏幕截圖嗎?這會更好地解釋它。 – 2012-03-31 08:49:03

+0

@DenisBalko:當您點擊保存設置頁面並關閉它時,您需要獲取viewController的一些變量(帶有TableView和NavigationController的變量)中的值。然後你可以申請我的解決方案 – 2012-03-31 08:51:05

2

第一視圖控制器:

的NSString * firstString = @ 「您的字符串」; 該字符串傳遞到第二視圖controllert創建的NSString到第二視圖控制器 在第二視圖控制器

nsstring *sencondstring; 

@屬性(非原子,保留)的NSString * sencondstring; @synthesize sencondstring;

現在回第一視圖控制器創建第二視圖控制器的對象

firstviewcontroller *firstviewObj=[[firstviewcontroller alloc]init; 

firstviewObj.sencondstring = firststring; OR firstviewObj.sencondstring = [nsstring stringwithformat:@「%@」,firststring];

+0

與我的答案有什麼不同?整個基本語法和流程與我的答案相同。即使你使用了相同的變量名稱和視圖控制器名稱。我認爲你不應該複製答案。我想將其標記給主持人 – 2012-03-31 08:46:30