- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如上面的问题所述,我对 iOS 非常陌生;我正在尝试执行这 3 个简单的步骤。
我正在寻找类似 android 中的东西,即 Pre Execute、doInBackground 和 Post Execute()。
这是我尝试过的。
parserAlert = [[UIAlertView alloc] initWithTitle:@"Loading" message:@"Please Wait" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[parserAlert show];
dispatch_queue_t queue = dispatch_queue_create("com.abc.testing", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue,^{
DBHandler *myDB= [[DBHandler alloc] init];
[myDB fetchResults];
dispatch_async(dispatch_get_main_queue(),^{
[parserAlert dismissWithClickedButtonIndex:0 animated:YES];
});
});
下面是 fetchResult 方法。
- (void) fetchResults
{
IParser *i = [[IParser alloc] init];
[i startParse];
AGParser *ag = [[AGParser alloc] init];
[ag startParse];
GParser *g = [[GParser alloc] init];
[g startParse];
HParser *h = [[HParser alloc] init];
[h startParse];
SParser *s = [[SParser alloc] init];
[s startParse];
}
这是startParse。
NSString *url = @"http://abcd.com/Service_URL/Service.asmx/GetNotes";
NSURL *nsUrl = [[NSURL alloc] initWithString:url];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:nsUrl];
NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:request delegate:self];
responseData = [[NSMutableData alloc] init];
[con start];
当我运行上面的代码时,Alerview 显示并在一秒钟内关闭。在方法上添加日志我观察到 fetchresults 方法立即返回并且警报 View 被关闭。但是 fetchResults 关联的线程(连接方法、解析器方法)继续执行,但警报 View 被关闭。
我需要指导如何阻止代码直到所有关联的方法完成。
感谢您的宝贵时间。
最佳答案
我知道这不是您想要的答案,但不要为此使用警报 View 。覆盖耗时事件的一个好方法是放置一个 UIActivityIndicatorView 或包含一个 UIActivityIndicatorView 的 View ,然后将其设置为旋转:
http://www.apeth.com/iOSBook/ch25.html#_uiactivityindicatorview
您还可以使用共享应用程序对象的 beginIgnoring...
来阻止发生耗时事件时的用户交互(并使用 endIgnoring...
将其关闭) > 当你完成时)。但是,如果要为用户提供“取消”按钮,显然您不能这样做。在这种情况下,请用一个不可见的 View (清晰的背景色)覆盖其他所有内容,其 userInteractionEnabled
为 YES,这样它就会吃掉除按钮之外的任何触摸。
此外,使用 dispatch_sync
几乎永远都不是正确的答案。一旦您按照我刚才描述的方式卡住了界面,您就可以进行连接(异步)和解析(在后台线程上),然后返回主线程以关闭事件指示器。
最后,您需要给自己留一条出路,以防出现问题。例如,您可以运行 NSTimer。
编辑:现在是您实际问题的实际答案,即为什么即使我使用了 dispatch_sync
我的代码也没有暂停:这是因为 [[NSURLConnection alloc] initWithRequest:request delegate :self]
立即返回;网络位于另一个后台线程中。因此,您的 startParse
返回,您的 fetchResults
返回,同时网络继续,并在一段时间后调用 NSURLConnection 委托(delegate)方法。
关于ios - 显示 AlertView,进行解析并关闭 AlertView - 使用 GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404724/
在我的应用程序中,我需要在用户单击警报 View 中的按钮时关闭警报 View 。我在我的应用中尝试了 [alertView dismissWithClickedButtonIndex:-1 anim
我在显示 5 个选项卡的 MainWindow.xib 上添加了一个选项卡栏 Controller ,并在我的应用程序委托(delegate)中具有选项卡栏 Controller 的委托(delega
我想显示嵌套的alertView。我在嵌套alertViews中面临的问题是,当我单击第一个alertView的“添加”按钮时,它显示第二个alertView,在第二个alertView中我有一个文本
如果我在 Controller 上有多个 AlertView,如果所有 AlertView 都分别触发,如何让它只显示最后一个 AlertView?请看下面的代码: override func vie
正如上面的问题所述,我对 iOS 非常陌生;我正在尝试执行这 3 个简单的步骤。 显示提醒 View 进行解析工作 关闭提醒 我正在寻找类似 android 中的东西,即 Pre Execute、do
我最近开始研究 iOS 开发,如果我问的问题太明显,请原谅我。 当我的应用程序的 View 加载时,它会检查某些键的配置,如果这些键没有值,应用程序应显示警报并退出。 首先,我已经实现了 UIAler
我正在定制 keyboard (iOS App Extension) .我有一个 UICollectionView在我的Keyboard Layout , 所以当一个 item已选中 我要显示 mes
我对警报 View 有一个小问题,想法是当应用程序启动时,它会在后台询问应用程序的新数据,因此在收到信息后,如果有新数据,则应显示警报 View 。问题来了,因为 AlertView 只显示在我启动
我首先使用“[UIAlertView alloc] initWithTitle:”来调整大小和自定义带有图像的AlertView,但失败了。 然后我使用以下代码,一切正常(调整了 alertView
我希望用户无法单击 UIAlertView 上的取消按钮,但我仍然希望它在那里,但被遮蔽了。我知道那里有一个 shouldEnableFirstButton 函数,但它不涉及取消按钮。你知道怎么做吗?
这似乎是 iPhone 的白象。我已经尝试了各种方法,甚至是循环,但我无法让它工作。 我有一个加载表格的 View 。然而,我已经进入对象归档,出于开发目的,我想要一个初始的 AlertView,询问
我想在没有按钮的 AlertView 中显示一个事件指示器,我想在事件指示器停止动画时禁用它。 最佳答案 UIAlertView *alert = [[UIAlertView alloc] initW
我刚刚看到无论如何都可以在主屏幕的背景中显示 AlertView。 这是由应用“UP by Jawbone”触发的 有人知道怎么做吗? 最佳答案 这是一条系统消息,因为 UP 尝试使用蓝牙。它不是由应
如何在不使用任何取消按钮的情况下让 alertview 自行消失? 最佳答案 使用这个... -(void)showAlertView { // code for showing your al
我正在尝试创建一个提醒 View ,在点击广告按钮后将一个或多个项目添加到我的表格 View 中。在按下添加按钮时,alertview 应该出现三个文本字段,用于显示项目名称、价格和数量,当按下确定按
我有一个警报 View ,其中添加了一个 uitextfield 作为 subview 。 在我的 uitableview Controller 中,键盘显示正常。 然而,在不同的角度来看,我想做同样
我有一个 UIAlertView,里面有一个 UITextField。我想输入 mail id 并在 UIAlertView 的 ok 按钮中提交,但是 UITextField 在 UIAlert
我有一个委托(delegate),它接收一条消息,以删除该项目作为参数的项目。 我想显示一个确认 AlertView,然后,如果用户按是,我想删除它。 所以,我所拥有的是 被调用的委托(delegat
希望你能帮助我。我如何用 else 语句显示alertView。在我的示例中,我检查文本字段是否为空。当它们为空时,它们将填充用户文本输入。现在,如果所有文本字段都填充了文本,我将显示一个警报 Vie
所以我让警报 View 检测是否存在事件的互联网连接。 这是代码: - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificatio
我是一名优秀的程序员,十分优秀!