通过 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 手动点击按钮时推送到详细视图控制器;再次返回,然后作为数据源数组的计数推送?

无法通过 didSelectRow tableView 方法显示视图控制器

DidSelectRow 不工作

未调用 DidSelectRow 函数

UITableView 的 didSelectRow 方法不起作用[重复]