【发布时间】:2010-01-25 16:39:48
【问题描述】:
我正在编写一些 Objective-C 代码,并且经常遇到必须使用类变量来存储一个值以供一次性使用的情况。吃完以后就不用了。对我来说,将此值存储在类变量中似乎是代码异味。实际上,该值应该作为参数传递给我正在使用的方法。
我通常在使用委托时遇到此问题。例如,我有一个带有多个按钮的 UI,用于在点击它们时加载和显示 UIActionSheet。此操作表包含一个日期选择器,当操作表被关闭时,它会为 UILabel 设置一个值。
- (IBAction)setPurchaseDateTapped {
self.activeField = purchaseDate;
[self loadDatePickerActionSheet:@"Edit Purchase Date"];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
self.activeField.text = value_from_UIActionSheet;
}
正如您在此处看到的,actionSheet clickedButtonAtIndex 回调不允许我传递activeField,因此我必须使用类变量。这样写似乎更正确:
- (void)actionSheet:(UIActionSheet *)actionSheet parameterValue:(id)parameter {
parameter.text = value_from_UIActionSheet;
}
我相信(?)我可以将 UIActionSheet 和 UIActionSheet 委托子类化并添加我需要的签名,但这似乎比它值得付出更多的努力。
所以我的问题是做我想做的事情的最佳方法是什么?
我不一定要更改我创建的日期选择器/操作表界面(尽管如果有更好的模式可以在 UIView 上设置多个日期同时不影响 DatePicker,我就是耳朵。)
【问题讨论】:
标签: iphone objective-c delegates uiactionsheet