0

我正在使用 UIPickerView 来显示问题的答案。如果用户无法解决,则需要一个按钮来显示正确答案。我尝试了以下方法,但应用程序崩溃了。如何自动滚动到正确答案?

-(void)reveal {

    [myPickerView selectRow:0 inComponent:0 animated:YES];

}

编辑:是的,我只是想让它滚动到上面示例中的第一个答案:)

[ExcerciseController 显示:]:无法识别的选择器发送到实例 0x68398f0 2012-10-30 14:57:21.673 英语[20786:f803] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[ExcerciseController 显示:]:无法识别选择发送到实例0x68398f0' *第一掷调用堆栈:(0x1397022 0x108ccd6 0x1398cbd 0x12fded0 0x12fdcb2 0x1398e99 0x1f214e 0x1f20e6 0x298ade 0x298fa7 0x298266 0x2173c0 0x2175e6 0x1fddc4 0x1f1634 0x21a3ef5 0x136b195 0x12cfff2 0x12ce8da 0x12cdd84 0x12cdc9b 0x21a27d8 0x21a288a 0x1ef626 0x2c5d 0x2b85)终止叫做抛出异常[切换处理20786线程0xf803]

4

3 回答 3

1

现在,错误/崩溃消息是可见的,事实证明错误不在于您如何调用选择器的方法。这就是您调用reveal.

你用一些对象调用显示。或者你通过传递一个选择器来调用它。但是,您正在调用的当前选择器是,reveal:但方法名称reveal没有任何参数。reveal:需要一个参数。

无论你在哪里打电话,确保你打电话reveal而不是reveal:

我假设您在界面生成器中或以编程方式创建按钮时设置选择器。那是你犯错的地方。

一些背景知识:错误信息告诉你你需要知道什么。在 Objective-C 中,方法名在运行时称为选择器。在某些文献中,您会发现消息的措辞(reveal:在您的案例中命名)被发送到ExcerciseController在您的案例中命名的接收者。

Objective-C 是多态的。这意味着reveal(不带任何参数调用)指的是另一种方法实现,而不是reveal:(带一个参数调用)甚至reveal::(带三个参数调用)。

于 2012-10-30T15:06:40.080 回答
0

请尝试发布崩溃描述,需要更多代码块来回答它:)

但是,只需尝试以下代码

myPickerView.delegate = self;
[myPickerView reloadAllComponents];
[myPickerView selectRow:0 inComponent:0 animated:YES];
于 2012-10-30T14:53:23.790 回答
0

myPickerView可能不是UIPickerViewasUIPickerView响应选择器的实例 -(void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated

或者您必须检查该方法reveal是如何被调用的。

于 2012-10-30T15:04:42.537 回答