2012-12-26 50 views
1

我在Viewcontroller中有一個NSString屬性self.textFromTextVC,它的值在IBAction方法中變爲null。NSString屬性在IBAction方法中失去了值

- (IBAction)buttonPressed:(id)sender 
{ 

    NSLog(@"text before alarm is created: %@", self.textFromTextVC); 

} 

下面的方法是在同一個「.M」文件和他們保持的NSString屬性的值。

-(void)setPropertyTextToReceivedText:(NSString *)text 
{ 

    self.textFromTextVC = text; 

    NSLog(@"text received from text VC: %@", self.textFromTextVC); 

    [self doesStringKeepValue]; //I call this method to check and see if the NSString value  
           //was retained 

} 

-(void)doesStringKeepValue 
{ 

    NSLog(@"keep value: %@", self.textFromTextVC); //NSString value the same from the above 
                //method 
} 

下面是如何我已經宣佈的NSString屬性:

@property (nonatomic, copy) NSString *textFromTextVC; 

基本上,我設置self.textFromTextVC的IBAction爲方法被調用之前,這就是爲什麼我很困惑。我真的不確定發生了什麼事。我選擇了ARC。 我希望我只是犯了一個簡單的錯誤......幫助? 謝謝,

下面是另一個視圖 - 控制,我叫setPropertyTextToReceivedText方法:

@implementation TextViewController 

@synthesize typedText; 


- (IBAction)doneButton:(id)sender { 

    [self.typedText resignFirstResponder]; 

    AlarmViewController *receiver = [[AlarmViewController alloc]init]; 
    [receiver setPropertyTextToReceivedText:self.typedText.text]; 

    //[self showAlert]; 
} 
+1

'textFromTextVC'的值不能在'buttonPressed:'中變爲null,因爲沒有可能導致它的代碼。在調用該方法之前它已經爲空。因此,請在代碼中顯示「textFromTextVC」最初爲其分配的任何值。 – Codo

+0

你在哪裏調用'setPropertyTextToReceivedText'告訴我們代碼 –

+0

@Codo我在方法setPropertyTexttoReceivedText中分配self.textFromTextVC。 – adam

回答

-1

我想你忘記了:

@synthesize textFromTextVC; 
+0

它根本不需要... @synthesize用於以前的日子:) –

+0

@AnoopVaidya真的嗎?出乎我的意料!但我認爲'self.textFromTextVC = text'的唯一原因不起作用,因爲'textFromTextVC'沒有被設置.. – Kjuly

+2

在新的xcode中,你只定義'@ property'和'@ synthesize'自動完成。它不可見。但是你可以自己覆蓋它。 –

2

你的問題是receiver是不同的對象比你VC這顯示(呈現/推送)。

AlarmViewController *receiver = [[AlarmViewController alloc]init]; 
[receiver setPropertyTextToReceivedText:self.typedText.text]; 
+0

+1:這當然是解決方案。 –

+0

我不知道爲什麼上面的代碼是不正確的,因爲它在textViewController中調用,所以ViewController對象需要類爲alarmViewControler,以便方法'setPropertyTextToReceivedText'將工作?那是錯的嗎? – adam

+1

@adam只需顯示「推送或呈現」您的'AlarmViewController'的代碼。我的觀點是,你推送的AlarmViewController對象與你在'doneButton'按鈕事件 –

0

更改此:

NSLog(@"text before alarm is created: %@", self.textFromTextVC);

要這樣:

NSLog(@"%@: text before alarm is created: %@", self, self.textFromTextVC);

,它可能會告訴你,你確實在看相同的兩個不同的對象實例類。