Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS5中UIPickerView SelectedRowUncomponent的不同奇怪行为_Iphone_Ios_Ios5_Sms_Uipickerview - Fatal编程技术网

Iphone iOS5中UIPickerView SelectedRowUncomponent的不同奇怪行为

Iphone iOS5中UIPickerView SelectedRowUncomponent的不同奇怪行为,iphone,ios,ios5,sms,uipickerview,Iphone,Ios,Ios5,Sms,Uipickerview,在iOS5更新之后,我的应用程序现在发生了一件奇怪的事情 我有一个UIPickerView并使用[customPickerView SelectedRowUncomponent:0]获取拾取的组件。用户选择第二行(索引为1) 所以它看起来像: i = [customPickerView selectedRowInComponent:0]; // -> i is 1 here, is OK! [smsAgent sendSMS:smsTxt]; //just call another

在iOS5更新之后,我的应用程序现在发生了一件奇怪的事情

我有一个UIPickerView并使用
[customPickerView SelectedRowUncomponent:0]
获取拾取的组件。用户选择第二行(索引为1)

所以它看起来像:

i = [customPickerView selectedRowInComponent:0];   // -> i is 1 here, is OK!
[smsAgent  sendSMS:smsTxt]; //just call another method to send a SMS
检查时,
i
的值正常。 现在我只需调用一个普通的SMS对话
smsAgent
,它基本上如下所示:

smsAgent...
      MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
      picker.messageComposeDelegate = delegate;
      picker.recipients =[NSArray arrayWithObject: myTelNumber];  
      [delegate presentModalViewController:picker animated:YES];
当然不会对我的提货员做任何事

但当这“回归”到

j再次为0,而不是1

当然,customPickerView没有发生任何事情-我真的很困惑-这里发生了什么

在更新到iOS5之前,没有任何问题

有什么我错过的吗


非常感谢

正如我在评论中所写,这种行为的原因是调用方法的顺序。让我详细解释一下:

启动屏幕screenVC具有ViewWillDisplay和ViewDidDisplay的常规方法。在这些消息中,将创建选择器(或任何元素),并将其设置为基础数据结构提供的值。那么让我们假设选取者得到10

现在,当选择一个不同的值20放入一个变量中时,我认为这是保存

现在,SMS对话框打开,其中一个发送SMS

但是现在发生的事情就是这个奇怪问题的原因。当SMS对话框消失时,将出现screenVC fires视图,这会将变量设置回10(因为数据结构尚未更新)

现在sms返回到didFinishWithResult,并且基础的20丢失

因此,您所需要做的就是确保用于从sms didFinishWithResult中更新数据结构的变量作为一个参数传递给屏幕上的disclose调用

只是一个附加问题。更令人惊讶的是,如果screenVC打开另一个screen2VC,其中只有选择器(并将值设置为10),然后这个screen2VC打开sms对话框。当sms对话框返回时,它会导致screen2VC调用ViewWillDisplay和ViewDidDisplay,即使它们已被取消

我想这是因为sms对话框启动程序屏幕需要在sms对话框关闭时出现

希望我能解释得足够好,能够理解——如果不清楚就问问


最后一点意见是:将调试语句放入指定变量的代码中,在那里您可以看到正在调用assignemnt,即使您没有预料到/想到它。

正如我在注释中所写,这种行为的原因是调用方法的顺序。让我详细解释一下:

启动屏幕screenVC具有ViewWillDisplay和ViewDidDisplay的常规方法。在这些消息中,将创建选择器(或任何元素),并将其设置为基础数据结构提供的值。那么让我们假设选取者得到10

现在,当选择一个不同的值20放入一个变量中时,我认为这是保存

现在,SMS对话框打开,其中一个发送SMS

但是现在发生的事情就是这个奇怪问题的原因。当SMS对话框消失时,将出现screenVC fires视图,这会将变量设置回10(因为数据结构尚未更新)

现在sms返回到didFinishWithResult,并且基础的20丢失

因此,您所需要做的就是确保用于从sms didFinishWithResult中更新数据结构的变量作为一个参数传递给屏幕上的disclose调用

只是一个附加问题。更令人惊讶的是,如果screenVC打开另一个screen2VC,其中只有选择器(并将值设置为10),然后这个screen2VC打开sms对话框。当sms对话框返回时,它会导致screen2VC调用ViewWillDisplay和ViewDidDisplay,即使它们已被取消

我想这是因为sms对话框启动程序屏幕需要在sms对话框关闭时出现

希望我能解释得足够好,能够理解——如果不清楚就问问


最后一点意见是:将调试语句放入指定变量的代码中——在那里,您可以看到正在调用assignemnt,即使您没有预料到/想到它。

感谢您详细解释此问题。我的UIPickerViews有问题。如上所述,我的代码基于CustomPickerView-

这段代码与5.0版不同。在做了大量研究之后,我发现UIPicker调用委托函数的顺序/顺序不是问题


但非官方函数“scrollAnimationDuration”已经被弃用,无法使用。这就是UIPicker无法长时间滚动的原因(就像iOS 4.3.3及以下版本一样)。

感谢您详细解释此问题。我的UIPickerViews有问题。如上所述,我的代码基于CustomPickerView-

这段代码与5.0版不同。在做了大量研究之后,我发现UIPicker调用委托函数的顺序/顺序不是问题


但非官方函数“scrollAnimationDuration”已经被弃用,无法使用。这就是UIPicker不能长时间滚动的原因(就像iOS 4.3.3及以下版本一样)。

这些调用都在同一个对象中吗?为compose控制器设置的“委托”是拥有pocket视图的视图控制器?我的猜测是,在您的最后一个代码段中,customPickerView实际上是nil.no-不是这样,UIPickerView只在对象A中,它调用smsAgent对象,并将自身作为委托提供。所以smsAgent返回到object
    - (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];
}