2012-12-26 2 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; 

, 나는 호출되는 IBAction를 방법 전에 self.textFromTextVC를 설정 그리고 난 혼란 스러워요 이유입니다. 나는 정말로 무슨 일이 일어나고 있는지 잘 모르겠습니다. ARC를 선택했습니다. 나는 단순한 실수를 저 지르 길 원한다. .. 도움? 다음은

내가 setPropertyTextToReceivedText라는 또 다른의 ViewController의 방법이다 감사 :

@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이 될 수 없습니다. 왜냐하면 그것을 일으킬 수있는 코드가 없기 때문입니다. 메서드가 호출되기 전에 이미 null입니다. 따라서'textFromTextVC'가 초기 값으로 지정된 코드를 보여주십시오. – Codo

+0

어디에서'setPropertyTextToReceivedText'를 호출합니까? –

+0

@Codo setPropertyTexttoReceivedText 메소드에서 self.textFromTextVC를 지정합니다. – adam

답변

-1

나는 당신이 잊고 생각 :

@synthesize textFromTextVC; 
+0

전혀 필요하지 않습니다 ... @synthesize는 이전에 사용되었습니다 :) –

+0

@AnoopVaidya really ??? 놀랍게도! 하지만'self.textFromTextVC = text'의 유일한 이유는'textFromTextVC'가 전혀 설정되지 않았기 때문입니다. – Kjuly

+2

최신 xcode에서는'@ property' 만 정의하고'@ synthesize'는 자동으로 수행됩니다. 그것의 보이지 않는. 그러나 당신은 당신 자신에 의해 그것을 무시할 수 있습니다. –

2

어떤 문제가 receiver입니다 것은 당신의 VC 다른 개체 인 (현재/푸시)가 표시됩니다.

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

이 사람 :이

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

+1 : 그건 분명히 해결책입니다. –

+0

위의 코드가 textViewController에서 호출 되었기 때문에 위의 코드가 올바르지 않은 이유가 확실하지 않으므로 'setPropertyTextToReceivedText'메서드가 작동하도록 ViewController 객체가 alarmViewControler 클래스에 있어야합니다. 그게 잘못 됐니? – adam

+1

@adam 여러분이'AlarmViewController'를'push 또는 present '한 곳의 코드를 보여 주기만하면됩니다. 나의 요점은'push "AlarmViewController 객체가'doneButton' 버튼 이벤트에서 만든 것과 다르다는 것입니다. –

0

변경

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

그리고 그것은 아마 당신이 실제로 같은 두 개의 서로 다른 개체 인스턴스에서 찾고있는 중임을 보여줍니다 수업.