自定义委托方法触发正常,但值不会保留在其他方法中
Posted
技术标签:
【中文标题】自定义委托方法触发正常,但值不会保留在其他方法中【英文标题】:Custom delegate method is triggered ok, but values not persist within the other methods 【发布时间】:2012-07-15 16:10:01 【问题描述】:我是 Objective-c 的新手。我正在做一个带有模态视图的应用程序,它将数据传递给他的父视图。我实现了一个协议委托,并且数据可以正常传递,但它不会在其他方法中持续存在,因为当我尝试使用传递的值做某事时,在我的委托方法之外似乎为空。我在委托方法中做了一个 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。我想用我的 _weightPassed 做点什么:
- (IBAction)saveLogToDataBase:(id)sender
// ... do some stuff
[row setKg: _weightPassed]; //<-- here _weightPassed is null
我想我错过了一些重要的概念或其他东西,希望有人可以帮助我
【问题讨论】:
那么现在你使用 _datePassed 还是 _weightPassed? 对不起,我现在编辑了代码,它是_weightPassed。 也许使用_weightPassed = [[f numberFromString:weight] retain]
?
我试过_weightPassed = [[f numberFromString:weight] retain]
,但结果还是一样
啊,我明白了!每次触发委托方法时,您都在重新创建 logWeightTvc... 这不好,您需要稍微更改您的设计模式。
【参考方案1】:
按照 H2CO3 的建议,我更改了设计模式,现在在显示模式视图之前传递了委托。我是在 prepareForSegue 方法中完成的:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"modalSegue"])
ModalView *pickerView = [segue destinationViewController];
pickerView.delegate = self;
【讨论】:
以上是关于自定义委托方法触发正常,但值不会保留在其他方法中的主要内容,如果未能解决你的问题,请参考以下文章