0

나는 objective-c에서 새롭습니다. 부모보기로 데이터를 전달하는 모달보기가있는 앱을 만들고 있습니다. 나는 프로토콜 대리자를 구현하고 데이터는 전달되지만 다른 메서드 내에서 지속되지 않습니다. 전달 된 값으로 무언가를하려고하면 대리자 메서드 외부에서 null이되는 것 같습니다. 델리게이트 메서드 내에서 NSLog를 수행하고 그 값이 존재하지만, 다른 메서드에서 값을 사용하고자 할 때 놓친 것 같습니다. ARC를 사용하지 않습니다.사용자 지정 대리자 메서드가 실행되지만 다른 메서드 내에서 값이 유지되지 않습니다

내 홈페이지 ViewController.h :

@protocol ModalViewDelegate 
- (void)didReceiveWeight:(NSString *)weight andUnit:(NSString *) unit; 
@end 

@interface LogWeightTableViewController : UITableViewController<ModalViewDelegate> { 
NSNumber *weightPassed; 
} 

@property (nonatomic, retain) IBOutlet UILabel *WeightSelected; 
//... 

내 홈페이지 ViewController.m :

//...this method is triggered ok, and _weightPassed has the value. 
- (void)didReceiveWeight:(NSString *)weight andUnit:(NSString *)unit{ 

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterDecimalStyle]; 
_weightPassed = [f numberFromString:weight]; //_weightPassed have null in another methods 
[f release]; 

NSString *value = [[[NSString stringWithString:weight] stringByAppendingString:@" "] stringByAppendingString:unit]; 

[WeightSelected setText:valor]; 
} 

내 ModalView.h :

@property (nonatomic, assign) id<ModalViewDelegate> delegate; 

내 ModalView.m :

- (void)viewDidLoad 
{ 
//... 
LogWeightTableViewController *logWeightTVC = [[LogWeightTableViewController alloc]init]; 
self.delegate = logWeightTVC; 

//...when i press a button to go back to main view call the delegate method: 
[delegate didReceiveWeight:valor andUnit:unidad]; 
나의 MainViewController.my에가는

내 _weightPassed 뭔가를하고 싶지 :

- (IBAction)saveLogToDataBase:(id)sender { 
// ... do some stuff 
[row setKg: _weightPassed]; //<-- here _weightPassed is null 

내가, 내가 몇 가지 중요한 개념이나 뭔가를 놓친 것 같아 누군가가 H2CO3으로이

+0

이제 _datePassed 또는 _weightPassed를 사용합니까? –

+0

죄송합니다. 코드를 편집했습니다. _weightPassed입니다. – sheinix

+0

아마도'_weightPassed = [[f numberFromString : weight] retain]'을 사용할 것입니까? –

답변

0

를 도와 줄 수 있기를 바랍니다 권장, 디자인 패턴을 변경했으며 이제 모달 뷰가 표시되기 전에 대리자가 전달됩니다. prepareForSegue 메소드에서 수행했습니다.

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"modalSegue"]) { 
     ModalView *pickerView = [segue destinationViewController]; 
     pickerView.delegate = self; 
    } 
}