通过 didSelectRow UIPickerView 传递托管对象数据
Posted
技术标签:
【中文标题】通过 didSelectRow UIPickerView 传递托管对象数据【英文标题】:Passing Managed Object Data Through didSelectRow UIPickerView 【发布时间】:2011-07-01 05:03:27 【问题描述】:我对如何通过 didSelectRow UIPickerView 操作传递获取的托管对象数据有点迷茫。
在之前的视图中,我是这样传递 CalcInfo 对象的:
CalcInfo *calc = (CalcInfo *)[_calcInfos objectAtIndex:indexPath.row];
self.myPageOneViewController.calcInfos = calc;
我成功地将 calcInfos.attribute 用于我的所有 IBAction:(id)sender 按钮,但 pickerView 无法获取/使用数据。 updateLabel 操作始终将 calcInfos.attribute 设为 NULL。这是我的一些代码
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
[self updateLabel];
- (void)updateLabel
double stdrate = [calcInfos.infusionstd doubleValue];
double lowrate = [calcInfos.infusionlow doubleValue];
if (calcInfos.infusionlow == NULL)
NSLog(@"It's null");
非常感谢您的帮助!
【问题讨论】:
我找到了解决方案!我有这种直觉,我的 xib 文件中的数据引用有问题。最初,我让委托和数据源引用了我的 PageOneViewController,但我尝试引用文件的所有者,并且它有效!我所有的按钮都可以用来检索我的 calcInfos 变量,这真的很奇怪,但是 pickerView 却无法... 【参考方案1】:选择器视图是一个带有自己的硬连线控制器的子视图。它返回在其委托消息 `didSelectRow:inComponent' 中选择的行和列/组件。
您需要将该信息传递给您的updateLabel
方法,以便您可以将pickerview 选择与您的托管对象相关联。现在,该方法根本不执行任何操作。
【讨论】:
感谢您的回复!我想你把我带到了正确的地方。但是,我不确定如何将 calcInfos 对象传递给我的 updateLabel 方法。 如果我理解正确,您是说 pickerView 在它自己的子视图中,所以 didSelectRow:inComponent 消息和 updateLabel 方法没有与主视图连接?这就是为什么我不能从子视图中调用我的托管对象属性的原因?当我从 UIButton IBAction 调用方法时,我的 updateLabel 方法可以调用属性。奇怪的是,我必须将托管对象信息发送到 pickerView 子视图中才能让 updateLabel 方法“看到”它。 pickerview 不与控制器共享任何数据。它只是返回到它的委托(可能是也可能不是控制器)。所以,如果你想从pickerview 中提供数据,你必须明确地这样做。您的updateLabel
方法不知道选择器视图选择是什么,除非您将值显式传递给它。以上是关于通过 didSelectRow UIPickerView 传递托管对象数据的主要内容,如果未能解决你的问题,请参考以下文章
通过 didSelectRow UIPickerView 传递托管对象数据
如何通过 didselectrow 手动点击按钮时推送到详细视图控制器;再次返回,然后作为数据源数组的计数推送?