连接到数据源/委托时 UIPickerView 崩溃应用程序

Posted

技术标签:

【中文标题】连接到数据源/委托时 UIPickerView 崩溃应用程序【英文标题】:UIPickerView Crashing App when wired up to Datasource / Delegate 【发布时间】:2010-06-20 17:19:28 【问题描述】:

从“Head First iPhone Development”一书中,为了让最简单的教程运行起来,我竭尽全力

有一个绑定到对象数组的 UIPickerView。就这些。它什么都不做,我想要它做的(现在)就是显示数组中的内容。我已经逐字按照书中的步骤进行操作,并且至少重新启动了 5 次。在我最近的尝试中,我发现了如何调试并添加了一些断点。

这是应用程序所能获得的

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
        return 1;

如果我将该行更改为返回 0;该应用程序加载一个空的 UIPickerView。如果是一个,则应用程序在运行时会爆炸。

我已经验证了数组存在并且有数据 - 将 pickerview 设置为 0 个组件,我可以将数组中的任何行返回到标签。只有当我通过 IB 将pickerview 连接到数据源/委托时,它才会被炸毁。

真的在我的束缚的尽头,一直试图让它运行和关闭几个星期,并准备将 macbook 扔出窗外并用弩追捕史蒂夫乔布斯。我觉得特别愚蠢,这是书中的第一个例子。任何帮助将非常感激。

更新:

这是代码

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    return 1;



- (NSInteger)pickerView:(UIPickerView *) pickerViewnumberOfRowsInComponent :
  (NSInteger)component 
    return [activities count];



- (NSString *)pickerView:(UIPickerView *) titleForRow:(NSInteger)row forComponent:(NSInteger)component
    return [activities objectAtIndex:row];

我刚刚尝试在“pickerViewnumberOfRowsInComponent”中插入一个空格,虽然书中没有 个空格。在(例如pickerView numberOfRowsInComponent)中放置一个空格使UIPickerView 工作,但它充满了问号而不是数组内容。书上好像有错别字。

【问题讨论】:

请向我们展示您的pickerView:titleForRow:forComponent:pickerView:viewForRow:forComponent:reusingView: 方法的代码(您实现的两者中的任何一个)。 【参考方案1】:

只是根据您的原始代码向大家澄清......

您的委托方法缺少空格:

- (NSInteger)pickerView:(UIPickerView *) pickerViewnumberOfRowsInComponent: ...

应该是:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: ...

而您的其他委托方法省略了参数名称 pickerView:

- (NSString *)pickerView:(UIPickerView *) titleForRow: ...

应该是:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow: ...

【讨论】:

【参考方案2】:

你想添加这个:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

    return [activities objectAtIndex: row];

【讨论】:

谢谢,那已经在里面了 - 请参阅带有代码的更新帖子。【参考方案3】:

您需要在pickerViewnumberOfRowsInComponent 之间留一个空格

(NSInteger)pickerView:(UIPickerView *) pickerViewnumberOfRowsInComponent : (NSInteger)组件

不幸的是,这是本书中的一个错字,但这个(以及其他错误)在 Head First iPhone 开发勘误表页面 (http://oreilly.com/catalog/errata.csp?isbn=9780596803544) 上被捕获。很抱歉让您头疼,希望您喜欢这本书。 -- 丹

【讨论】:

谢谢丹,我把它整理好了。空间问题是罪魁祸首,问号是一个足够简单的解决方法。我现在真的不记得问题是什么了,但没过多久就解决了。谢谢!【参考方案4】:

刚刚看到您的更新 - 很高兴您发现了空间问题。至于问号,那(显然)不应该发生。您可以在设置活动数组的位置发布代码吗? -- 丹

【讨论】:

以上是关于连接到数据源/委托时 UIPickerView 崩溃应用程序的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 不显示

UIPickerView 委托在以编程方式创建时从不调用

Swift 中带有“外部”数据源和委托的 UIPickerView

iOs5,试图了解 UIPickerView 以及如何将其连接到我的自定义类

为 UIPickerView 创建委托和数据源

无法分配 UIPickerView 委托或数据源