gpt4 book ai didi

ios - UIPopoverController 解雇的奇怪延迟

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:55 24 4
gpt4 key购买 nike

也许这纯粹是模拟器相关的。我还没有在实际设备上尝试过。

我使用的是配备 1TB 闪存驱动器、95% 空闲处理器和低于全部内存消耗的最新款 MacBook。

我有一个 UIPopoverController,里面有 4 个项目,大小适合这些项目。有问题的 UIPopoverController 没有以任何方式关联的复杂、多线程或长时间运行。

我已将出现和关闭动画设置为 0,但是当我点击列表中的某个项目时,弹出窗口消失似乎有 0 到 .4 秒之间的随机不确定延迟。当然 0 是预期的,但是接近半秒的时间明显更长且令人不安。

知道是什么原因造成的吗?

显示弹出窗口的代码...

-(IBAction)theLandImpsButtonPressed:(UIButton *)sender
{
iRpNameValuePopover *thePopoverContent = [[iRpNameValuePopover alloc] init];
thePopoverContent.theTableValues = [self getLandImpsChoicesList];
impsLandPopover = [[UIPopoverController alloc] initWithContentViewController:thePopoverContent];
thePopoverContent.thePopoverController = impsLandPopover;
impsLandPopover.popoverContentSize = [iRpUIHelper sizeForPopoverThatHasTitle:NO andListContent:thePopoverContent.theTableValues];
impsLandPopover.delegate = self;

[impsLandPopover presentPopoverFromRect:self.theLandImpsButton.bounds inView:self.theLandImpsButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
}

关闭弹出窗口的代码...顺便说一句,这里没有评估时间 [self userChoiceIsValid] 因为它现在只是返回 YES。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
_theChosenNameValueItem = [self.theTableValues objectAtIndex:indexPath.row];
[self acceptUserChoiceAndClose];
}


// This contentViewController is encapsulated INSIDE a UIPopoverViewController, and this class cannot itself
// close the popover which contains it, hence the need for the reference to the popover controller
// It is the popover's delegate... the one that created the popover, that is able to close it.
-(void)acceptUserChoiceAndClose
{
_theUserChoseAValue = NO; // Start by assuming they didn't chose a valid value.

if ([self userChoiceIsValid])
{
// Set variable that indicates the user chose a value which can be saved to core data, and/or presented on screen.
_theUserChoseAValue = YES;

// Close the popover.
[_thePopoverController dismissPopoverAnimated:NO];

// Notify the class that presented the popover that the popover has been dismissed.
// It will still be available to the dismissal method where code can retrieve the user's choice, and set the popover to nil.
if (_thePopoverController.delegate && [_thePopoverController.delegate respondsToSelector:@selector(popoverControllerDidDismissPopover:)])
{
[_thePopoverController.delegate popoverControllerDidDismissPopover:_thePopoverController];
}
}
else
{
[self showValidationFailureMessageToUser];
}

}

最佳答案

在主线程中关闭 viewController 将解决问题。

dispatch_async(dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];
});

关于ios - UIPopoverController 解雇的奇怪延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31422980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com