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

重要な概念か何かが欠けていると思います。誰かがこれを手伝ってくれることを願っています

4

1 に答える 1

0

H2CO3 が推奨するように、デザイン パターンを変更し、モーダル ビューが表示される前にデリゲートが渡されるようになりました。私は prepareForSegue メソッドでそれを行いました:

 - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
     if ([[segue identifier] isEqualToString:@"modalSegue"]) {
        ModalView *pickerView = [segue destinationViewController]; 
        pickerView.delegate = self; 
    }
}
于 2012-07-19T16:05:37.433 に答える