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
的值是可以的。
现在我只是打电话给正常的短信对话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之前,没有任何问题。
有什么我错过的吗?
非常感谢
答案 0 :(得分:1)
感谢您详细解释问题。我的UIPickerViews出了问题。正如我在上面的评论中所提到的,我的代码基于CustomPickerView - http://iphonedevelopment.blogspot.co.uk/2009/02/longer-spinning-blurring-v20.html
此代码与5.0版本不同。经过大量的研究后,我发现UIPicker调用委托函数的顺序/顺序不是问题。
但特别是非官方函数“scrollAnimationDuration”已被弃用且无法使用。这就是UIPicker不能滚动更长时间的原因(就像iOS 4.3.3及更低版本一样)。
答案 1 :(得分:-1)
正如我在评论中所写,这种行为的原因是调用方法的顺序。让我详细解释一下:
起始屏幕screenVC具有常规方法viewWillAppear和viewDidAppear。在这些消息中,选择器被创建(或任何元素),并被设置为底层数据结构提供的值。可以说选择器得到10。
现在当选择一个不同的值20放入一个变量时,我认为这将是可行的。
现在打开SMS对话框,然后发送短信。
但现在发生的是这个奇怪问题的原因。当SMS对话框消失时,screenVC会触发viewWillAppear,这会将变量BACK设置为10(因为数据结构尚未更新)
现在短信回到didFinishWithResult,底层的20就丢失了。
因此,您需要做的就是确保用于从sms中更新数据结构的变量didFinishWithResult作为参数传递给您的屏幕解除调用。
另外一个问题。如果screenVC打开另一个只有选择器的screen2VC(并将值设置为10),那么更令人惊讶的是,然后打开sms对话框。当sms对话框返回时,它会导致screen2VC调用viewWillAppear和viewDidAppear,即使它们已被解除。
我认为这是因为当sms对话框解散时,sms对话框启动画面需要在那里。
希望我能够很好地解释清楚 - 只要问一下它是否不清楚。
作为最后一条评论:将调试语句放入代码中你的变量被分配的代码 - 你可以看到即使你没有想到/想到它也会被调用。