【发布时间】:2011-10-22 20:56:59
【问题描述】:
iOS5 更新后,我的应用现在发生了一件奇怪的事情。
我有一个 UIPickerView 并使用 [customPickerView selectedRowInComponent:0] 来获取选择的组件。用户选择第二行(索引为 1)
所以它看起来像:
i = [customPickerView selectedRowInComponent:0]; // -> i is 1 here, is OK!
[smsAgent sendSMS:smsTxt]; //just call another method to send a SMS
检查时i的值是OK的。
现在我只需调用一个普通的短信对话smsAgent,它看起来基本上是这样的:
smsAgent...
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = delegate;
picker.recipients =[NSArray arrayWithObject: myTelNumber];
[delegate presentModalViewController:picker animated:YES];
当然不会对我的选择器做任何事情。
但是当这个“返回”在
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
[self dismissModalViewControllerAnimated:NO]; //take away the SMS screen fast, so we can send selectModeVCDidFinish to take away ourselves
int j = [customPickerView selectedRowInComponent:0];
[self.delegate selectModeVCDidFinish: selectedMode];
}
j 的值又是 0,而不是 1!
当然,customPickerView 没有任何反应 - 我真的很困惑 - 这里发生了什么?
在升级到 iOS5 之前没有任何问题。
有什么我错过的吗?
非常感谢
【问题讨论】:
-
这些调用都在同一个对象中吗?您为撰写控制器设置的“委托”是拥有袖珍视图的视图控制器?我的猜测是,在您的最后一个代码段中,customPickerView 实际上是 nil。
-
不——不是这样,UIPickerView 仅在对象 A 中,它调用 smsAgent 对象,将自身作为委托。所以 smsAgent 返回到对象 A,它持有 UIPickerView。但是返回后,选择的值再次不正确...
-
既然
i看起来像一个ivar,为什么不直接设置j = i? -
是的,我会这样做 - 但是为什么 selectedRowInComponent 不再正常工作了?
-
当您关闭消息撰写视图控制器并再次显示选择器控制器时,该行是否仍处于选中状态?当您在选择器控制器前面显示另一个视图控制器时,您可能会丢失选择
标签: iphone ios ios5 sms uipickerview