Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
iOS:在nsrunlop中处理UI事件_Ios_User Interface - Fatal编程技术网

iOS:在nsrunlop中处理UI事件

iOS:在nsrunlop中处理UI事件,ios,user-interface,Ios,User Interface,我正在开发一个iPad应用程序,它需要为一些用户交互生成一个对话框中间功能。为了等待对话框,我运行了nsrunlop,但这会阻止处理对话框上的事件。以下是生成对话框的方式: NSArray* listOfCompatibleTypes = [[NSArray alloc] initWithArray:[listOfCompatibleTypesAndSizesAsSet allObjects]]; [secondaryImplantChooserDialog setModalPresentat

我正在开发一个iPad应用程序,它需要为一些用户交互生成一个对话框中间功能。为了等待对话框,我运行了nsrunlop,但这会阻止处理对话框上的事件。以下是生成对话框的方式:

NSArray* listOfCompatibleTypes = [[NSArray alloc] initWithArray:[listOfCompatibleTypesAndSizesAsSet allObjects]];

[secondaryImplantChooserDialog setModalPresentationStyle:UIModalPresentationFormSheet];
[secondaryImplantChooserDialog setDefinesPresentationContext:YES];                
[self presentViewController:secondaryImplantChooserDialog animated:NO completion:nil];
运行循环是这样的:

NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
while (secondaryImplantChooserDialog.fDialogDone != YES)
{
    [runLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
}
该对话框有一个包含tableview的弹出窗口。当我注释掉runloop时,会调用表视图的didselectRowatineXpath…方法。但是,当循环处于活动状态时,直到对话框被取消,才会调用该方法


我意识到这不完全是一个iOS犹太设计,所以我可能应该重构它,但我想知道是否有任何方法可以在runloop处于活动状态时处理UI事件

轮询很少是一个好的解决方案,尤其是在像iOS应用程序这样的用户交互环境中。您正在寻找的功能是一个信号量,您可以在其中阻止应用程序一部分的执行,直到另一部分完成。您可以使用,但当更好的解决方案是重新考虑因素时,这可能会增加复杂性

据我所知,您有一个方法正在执行一些计算或业务逻辑,它确定需要额外的信息。您可以重构如下内容:

   if ([self haveEnoughInfo]) {
       [self performFinalCalc];
   } else {
       [self gatherMoreInformation];  // Use a delegate or completion block to invoke [self performFinalCalc] once more information is gathered
   }

投票很少是一个好的解决方案。也许您可以使用NSLock来阻止,直到对话框完成为止?关于如何使用它,您有什么想法吗?我以前从未使用过NSLock。如果不进一步了解程序的结构,很难说。首先,我不清楚您为什么会遇到问题-显示模式视图应该会阻止与其他UI元素的任何交互,并且第一个视图控制器应该是模式视图的代理,以便它知道对话框何时被取消,问题是,在生成对话框的同一个函数中,在运行循环之后,我有一些代码。问题是对话框生成,函数的其余部分执行。我的目标是在用户做出选择之前尝试阻止进一步的执行。我会尝试重构您的代码,也许会将方法一分为二。我不认为NSLock方法会因为线程问题而起作用。