dismissViewControllerAnimated有延迟

dismissViewControllerAnimated:completion:在应用中运行正常,就是不知道为什么出现了几秒钟的延迟:

[api loginWithUsername:[dict objectForKey:@"username"] andPassword:[dict objectForKey:@"password"] andSuccessBlock:^(id json) {
    NSLog(@"DONE... %@", [json objectForKey:@"status"]);
    NSString *status = [json objectForKey:@"status"];
    if([status isEqualToString:@"ok"]){
        app.user = [json objectForKey:@"data"];
        [self dismissViewControllerAnimated:YES completion:nil];
    }else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"could not log you in" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    }
}];

在控制台可以看见DONE... ok。,意味着回调block执行正常,但是接下来需要三四秒钟延迟视图才能最终被dismiss。

怎么解决这个延迟问题?谢谢

2个回答

如果你不能保证UI代码运行在主线程中,它可能就运行到其他地方去了,这样的话会出现几秒钟的延迟。

添加下面的代码可以让dismissal运行在主线程中:

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

代码只给了一部分,无法看出什么问题。
从这个函数名上推测:应该是使用用户名密码登录时请求了网络连接,视图dismiss的这个三四秒中的延迟应该是网络连接造成的。而这个网络连接没有使用异步,或者是使用了异步连接但是SuccessBlock里的代码段只会在网络连接请求成功后调用。

建议将dismiss放到别的地方去。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
dismissViewControllerAnimated问题,求教!!!
有个视图控件器A, A是显示一个列表,列表上有数据,如下:rn[img=http://img.my.csdn.net/uploads/201304/22/1366621224_5555.png][/img]rn点击列表上的数据,跳到另一个视图控件器B,rnrn跳是用这代码:[self presentViewController:B animated:YES completion:nil];rnrn但在视图控件器B的- (void)viewDidLoad上我直接调用视图控件器A的[self dismissViewControllerAnimated:YES completion:nil];(关于为什么要调用这代码,是因为在B的viewDidLoad上我检查了一些数据,但这些数据不对,要跳回A)这时提示rn[img=http://img.my.csdn.net/uploads/201304/22/1366621933_6893.png][/img]rnrn2013-04-22 16:58:38.042 CPE-PANNEL[7324:12313] Warning: Attempt to dismiss from view controller while a presentation or dismiss is in progress!rnrn而视图控件器B并没有在屏幕上消失,求解
dismissViewControllerAnimated为什么不起作用
我的rootViewController是和xib对应的登录的LoginViewController,登录成功后,我想让这个ViewController关闭,然后弹出故事面板,但是调用dismissViewControllerAnimated后,LoginViewController没有消失,更没有弹出故事面板,请问哪里出错了呢?rnrn代码如下:rnrnself.dismissViewControllerAnimated(true, completion:rn rn let mainStoryboard = UIStoryboard(name: "Main", bundle: nil);rn let window = UIWindow(frame: UIScreen.mainScreen().bounds);rn window.rootViewController = mainStoryboard.instantiateInitialViewController() as? UIViewController;rn );
dismissViewControllerAnimated之后的原页面变形
原页面上移,屏幕下方出现一条高度和导航条一样的白条n,不知道怎么解决好n
iOSm界面跳转和参数传递之presentViewController与dismissViewControllerAnimated
NULL 博文链接:https://stephen830.iteye.com/blog/2243853
支持横竖屏的使用dismissViewControllerAnimated的时候crash的解决方案
前要 最近遇到很坑的问题,我们都遇到屏幕的横竖屏的情况,大部分的播放器的播放视频的时候都要支持横竖屏的操作,我由于用到了模态方式presentViewController弹出其他控制器,进行其他的操作,完成之后再使用dismissViewControllerAnimated收起模态出来的控制器,我的原来的控制器是支持屏幕自动旋转,支持横竖屏 //屏幕进行物理旋转的时候都会执行是否支持自动旋转 ...
delphi中数据库操作有延迟
大神好:rn我在form里添加了1个ADOConnection、2个ADOQuery、2个DataSource和一个DBGrid。数据库是Access的mdb数据库,数据库有两个表(company表、unit表)。ADOQuery的sql语句是常规的增删操作,我通过ADOQuery往表里添加记录后运行rnDBGrid.DataSource.DataSet.Close;rnDBGrid.DataSource.DataSet.Open;rnDBGrid并不立刻显示新记录,延迟三四秒后重新打开这个form才会显示。rn求大神指导如何解决,万分感激..rn
player 播放音频文件 有延迟
rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnjsp中用的这个player插件播放服务器中的wav文件。rnrn服务器IP设置成192.168.X.X可以正常播放。rn服务器IP设置成172.16.X.X 或172.17.X.X播放时就有延迟 会等待一段时间才开始播放。rnrnrn
用鼠标移动视角有延迟
用鼠标移动视角有延迟,我是通过两帧的鼠标位移差来确定视角的移动,而且帧数几百帧。。。怎么弄都达不到cs那种感觉。。晃动视角就跟有加速度一样为什么啊??
延迟签名有什么作用
延迟签名后,项目将不会运行,也不能进行调试,不能运行不能调试,也就不能继续开发,所以延迟签名到底有什么作用,请赐教
gvim的w命令有延迟.
就是那个normal mode下移动到下一个word的w命令, 每次都有半秒延迟才移动.rn而W, b, B, e, E, g, gE都没问题.rnxp系统, gvim版本7.2, mswin.vim已经被我关了.rn大虾救我!!!!!!!!!!!!
Timmer.Dispose方法是不是有延迟?
[code=C#]rnusing System;rnusing System.Collections.Generic;rnusing System.Linq;rnusing System.Text;rnusing System.Windows;rnusing System.Windows.Forms;rnusing System.Threading;rnrnnamespace ConsoleApplication1rnrn class Programrn rn static int i = 0;rn static System.Threading.Timer timer;rnrn static void Excute(object obj)rn rn Thread.CurrentThread.IsBackground = false;rnrn if (i == 0)rn rn Thread.CurrentThread.Name = "MyThread";rn rnrn i++;rn rn Thread.Sleep(1000);rn if (i == 80)rn timer.Dispose();rn Console.WriteLine(Thread.CurrentThread.Name + ":" + i.ToString());rn rnrn static void Main(string[] args)rn rn timer = new System.Threading.Timer(Excute, null, 0, 50);rn Thread.Sleep(1000);rn rn rnrn[/code]rn这段代码使用了System.Threading.Timer类,按照代码的逻辑在i到80后由于执行了timer.Dispose();timer就不会增加新的线程了到80 timer就释放了,但是执行的结果确是i到160左右程序才停下来?rn请问是不是因为timer.Dispose();有延迟导致timer没有立即释放掉?
mfc下拉列表响应函数有延迟
CStdioFile file;rn int i = 1;rn CString strAddr2;rn CString strAddr1;rn GetDlgItemText(IDC_EDIT_NUMBER, strAddr1);rn int len = strAddr1.GetLength();rn file.Open(_T("mima.txt"), CFile::modeRead | CFile::typeText);rn while (i) rn rn if (len==0)break;rn file.ReadString(strAddr2); rn if (strAddr2 == strAddr1) rn file.ReadString(strAddr2); SetDlgItemText(IDC_EDIT_PASSWORD, strAddr2); i = 0;rn rn file.ReadString(strAddr2);rn rn rn file.Close();rn我的响应函数是这样的,想实现的是下拉选择一个值和mima.txt里的数据进行比对,然后设置密码框的密码,但是总是要选两次下拉框的值,下面的密码才出现.
ON_THREAD_MESSAGE处理消息有延迟?
我用的是pThread->PostThreadMessag将消息发出去,但是线程似乎不是马上就进入ON_THREAD_MESSAGE里面定义的消息处理函数,要等一段时间。消息少的时候还没什么,只是会等一阵,但是有时消息会超过一万条,这样最后总是丢掉很多消息,大概之处理最先收到的几千条,如果能同步处理完的话似乎就没有这个问题了,这是怎么回事呢?查了msdn也没找到原因。另外,我的线程在rnInitialInstance里面调了一个函数,rnvoid CThreadGetCmdResultMq::QueryStatus()rnrn while (1)rn rn if (_consumer.bListenEnd)rn rn break;rn rn Sleep(100);rn rn PostThreadMessage(WM_QUIT,0,0);rnrn_consumer.bListenEnd是在所有消息发送结束之后才会置为true的,这样处理会不会影响消息处理?
drop tabble有延迟吗?
[注:因为论坛安全机制,drop tabble多写了一个b]rn我用drop tabble删除了一个表rn接下来用select into的时候,提示该表已存在rn但是我打开看了,确实已经没有了
鼠标事件有延迟,怎么解决?
实现了mouselistener的接口,发现mouseReleased和mousePressed事件有延迟,有时候点下去甚至没有反应,但是mouseEntered、mousePressed和mouseExited事件正常。这个问题怎么解决?
延迟
就是移动头部与屏幕捕捉到你动作的时间差。也许你已经体验过了VR,而且发现了当转动头部的时候,看到的图像并不会随着视线立即移动,这就是延迟。这种延迟严重影响VR的使用体验,因为它是在现实世界中完全不存在的。图像的延迟是使用者们经常抱怨的一点,也是对VR技术的一个衡量标准。  PS. 建议参考下列文章: 1.VR为何会延迟?Oculus首席科学家解惑 对于高质量的VR体验而言,最重要的是使用者头部物理...
关于移动端的click时间有延迟的问题(300ms延迟)
首先这个问题百度google一大堆,这里不详细阐述,只提供一种解决方案。 还是先说一下问题的由来: 问题由来 这要追溯至 2007 年初。苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题。 这当中最出名的,当属双击缩放(double tap t
延迟插件实现延迟队列
环境要求Github: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange Rabbitmq版本要求: RabbitMQ 3.5.7 and later versions. Erlang版本要求: Erlang/OTP 18.0 and later versions 插件列表: http://www.rabbitmq
延迟渲染与延迟光照对比
延迟渲染与延迟光照的技术对比,讲的比较好.
ping 延迟和程序延迟不一样。
我用 C# socket 的 beginXXX 和tcpclinet 类做的网络通信程序。 本机通信就有近10ms的延迟。rnrn用ping 测试服务器延迟26毫秒左右。rn但是程序中 是56毫秒左右 。 这么大差值正常么。 怎么会有这么大差距!! rn
相位延迟和群延迟的区别
其实已经是期末考试的前两天了,但是为了彻底了解相位延迟与群延迟的区别,我硬是把专业相关书籍过了个遍,因为网上相关解释非常少或者不清楚。当然这也是我现在写这篇文章的原因之一。接下来请听我详细道来: (注意:由于相位延迟与群延迟的公式定义不便于此编辑,最好事先了解或对照书本继续) 1.相位延迟 如果将相位响应图示坐标,可以想象,当只有单频信号作为系统输入时,连接原点与这个单点的坐标的直线的斜率的
vs2005中输入代码有延迟
有时候用vs2005(有VassistX)用键盘打一个字母,字母不能立即显示出来,总要过一两秒后才显示出来,不知道哪里出了问题?
lottie加载动画,第一次有延迟问题
lottie是airbnb推出的一个直接将AE工程转化为动画的工具。ae.project-->data.json-->LottieComposition-->Lottie动画之前做一个比较复杂的动画,花了两天时间都在画各种弧,计算运动轨迹等等。感觉我不是在编程,我是在算数学。上lottie的过程,花了半天时间调AE动画,因为设计师的电脑上装插件没装成功。所以AE转json文件的过...
网络有延迟怎样解决?(在先等)
网络是2000和98混合组网的,有工作组!2000访问98时有延迟怎样解决!谢谢!
关于软件在触摸屏上输入数字有延迟?
哎呀!我现在编写的软件是在触摸屏上输入手机号,功能实现了,但输入手机号时,每输入一个数字得稍等一下再输入才可以,尤其是连着输入同一个数字很麻烦的。如手机号:13000000000,要是输入这个手机号就非常的慢,要是输入没有重复的数字速度还可以。rn是不是触摸屏都这样呀!但我看别的人做的这种软件输入数字都挺快的。rn这应该是技术问题,但我不知道怎么才能实现。rn请大家帮忙呀!对了我是用JavaScript实现的。
WinPCap收包时间有延迟的解决方法
函数 pcap_t* pcap_open( const char * source,int snaplen,int flags,int read_timeout,struct pcap_rmtauth * auth,char * errbuf ) 其中第四个参数为读取超时时间, 将此时间设置的小一点即可解决问题. 例如设置为 1 , 即 1毫秒为延迟时间
异步串口readFile 有延迟 OverLapped不起作用
问题如题,[color=#FF0000]OverLapped不起作用[/color]rn我在读串口的时候,发现从数据发给下位机,到readfile接收到数据,中间都要平均50毫秒的延迟,如果我不用超时ReadIntervalTimeout 设置为0xFFFFFFFF,另外另个读超时设置为0,readfile又会一直读。现象跟readOverLapped事件不起作用一样,请大神指点,rn一下是我读串口线程,和超时参数设置rnrn COMMTIMEOUTS CommTimeouts;rn CommTimeouts.ReadIntervalTimeout = 1;rn CommTimeouts.ReadTotalTimeoutMultiplier = 0;rn CommTimeouts.ReadTotalTimeoutConstant = 0;rn CommTimeouts.WriteTotalTimeoutMultiplier = 0;rn CommTimeouts.WriteTotalTimeoutConstant = 0;rn if (!SetCommTimeouts(hdSerialPort, &CommTimeouts))rnrnUINT ReadThreadFun(LPVOID pParam)rnrn while(bDevOpen)rn rn //设置事件为无效状态rn ResetEvent(readOverLapped.hEvent);rn if(hdSerialPort!= INVALID_HANDLE_VALUE)rn rn DWORD readBytesCnt = 0;rn UCHAR tmpSerialData[512] = 0;rn ReadFile(hdSerialPort, tmpSerialData, sizeof(tmpSerialData), &readBytesCnt, &readOverLapped);rnrn ////等待事件触发rn WaitForSingleObject(readOverLapped.hEvent, INFINITE);rnrn if(hdSerialPort== INVALID_HANDLE_VALUE || !bDevOpen)rn continue;rnrn //获取读取的长度rn DWORD readLen = 0;rn GetOverlappedResult(hdSerialPort, &readOverLapped, &readLen, FALSE);rn if(readLen > 0)rn rn //处理数据rn rn rn elsern rn //等待事件触发rn WaitForSingleObject(readOverLapped.hEvent, INFINITE);rn rn rn return 0;rn
为什么Android刷新图片有延迟
我在一个线程结束时向主线程Handler发送了消息申请更新界面,代码如下:rnrn[code=java] rnprivate void UpdateUI(Mat Mat2Show)rn rn double time = (endTime-startTime)/Core.getTickFrequency();rn Message msg = new Message();rn Bundle bundle = new Bundle();rn bundle.putDouble("Time", time);rn bundle.putDouble("x", x);rn bundle.putDouble("y", y);rn bundle.putDouble("z", z);rn msg.setData(bundle);rn msg.obj = Mat2Show;rn msg.what = Unity.MessageID.UPDATE_UI;rn Log.i(Unity.TAG, "SteroVision SendMessage");rn handler.sendMessage(msg);rn rn[/code]rn其中handler是在线程中通过rn[code=java]rnHandler handler = new Handler(Looper.getMainLooper());rn[/code]rn获得的。rn主线程中的handleMessage函数中关于此消息的处理部分为:rn[code=java] rncase Unity.MessageID.UPDATE_UI:rn //Update UIrn msgBundle = msg.getData();rn showMat = ((Mat)msg.obj).clone();rn //post(new UIRunnable());rn double time = msgBundle.getDouble("Time");rn textView.setText("Computing Time is "+time*1000+"ms");rn coordinateTextView.setText("x="+msgBundle.getDouble("x")*100+"cm, y="+msgBundle.getDouble("y")*100+"cm, z="+msgBundle.getDouble("z")*100+"cm");rn showImage(showMat, imageView);rn //textView.invalidate();rn //coordinateTextView.invalidate();rn //imageView.invalidate();rn Log.i(Unity.TAG, "is UpdateUIing");rn break;rn[/code]rnshowImage函数为:rn[code=java]rn private void showImage(Mat matImage, ImageView imageView)rn rn Bitmap bitmap = Bitmap.createBitmap(matImage.width(), matImage.height(), Config.RGB_565);rn Utils.matToBitmap(matImage, bitmap);rn imageView.setImageBitmap(bitmap);rn rn[/code]rn请问为什么不管是imageView还是textView都不能在获得这个消息后立即更新UI而必须要等很久,或者用手点击屏幕之后才更新UI呢?整个程序中没有使用点击屏幕的响应函数。
c# 调用mediaplayer 播放音乐时 有延迟
[size=24px]c#在调用mediaplayer播放音乐时,要等一会才能听到声音,怎么能解决这个问题,求高手帮忙[/size]
opencv读取视频有延迟解决方法
记得曾经用opencv读取摄像头然后实时处理,由于处理速度比较慢,导致被积压的图像帧越来越多,视频的延迟会随着时间变得越来越严重,当时并没有解决这个问题,因为当时在主要研究算法,直接使用视频文件代替了。(用联想G50笔记本电脑内置摄像头是如此,用海康威视的网络摄像头好像也是这样) 今天又有一个对摄像头实时视频流做算法处理的任务,但是这次用的是定制的usb摄像头,不知道为何这次的延迟与之前遇到的不同...
Unity的Animator中Transition有延迟的问题
洪流学堂,让你快人几步。 洪流学堂公众号回复space,下载本文用到的卡通太空主题资源。 小新:“智哥,我遇到一个动画系统中问题,不知道是Unity的BUG,还是我的使用方式不对。” 大智:“说来听听什么问题?” 小新:“我的需求是这样的,我有一个模型,做了3段路径动画,想要每次点击模型的时候能够切换到下一段动画,但是前提要保证上一段动画播放完成才行。我用了Has Exit Time,但是发现...
有什么函数可以产生延迟?
请问有什么在vc++中有什么函数可以控制延迟?比如要在100秒后显示一些东西。
有什么办法让WINDOWS服务延迟启动?
如题
Alarmmanager设置定时任务有延迟的问题
安卓在6.0引入了新的省电机制——Doze模式,系统息屏后会把一些广播啊网络啊什么的都切断或者降低频率,所有我们设的闹钟广播也被延迟了,在android6.0之后,如果想继续保持Alarm在手机处于所谓Doze模式时仍然能够被即时响应,则需要使用AlarmManager新提供的两个方法setAndAllowWhileIdle()或者setExactAndAllowWhileIdle() 最后代码...
有关于网络传送数据延迟的问题
我想自己写一个邮件程序,有NetWorkStream与POP3服务通讯时,由于网络延迟的缘故,每次执行NetWorkStream.Write()方法的结果都不同,还知道一个BeginWrite的方法,可是对于其中的一个CallBack参数一直理解不了,请各位大侠给出好的解决方法或指导!
页面切换有延迟是怎么解决
小弟做了一个app,有若干界面,界面之间用button或textview点击切换,发现点击后有一定延时才能进入下个界面……感觉上去比较木,这是怎么回事,怎么解决呀……[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif][/img]nnPS:界面有图片,大小2~400K不等,有些界面刚进入时会连接一次服务器,有些界面会一直定时连接服务器
directsound录音,麦克风实时输出有0.5s的延迟
如题,怎样做到0延迟啊?
unity动画控制变量检测有延迟
针对unity中animator变量变化检测不及时的处理办法。unity的animator中,如果bool变量变化的太快,会导致动画的切换被取消或者是不执行,比如在点击按钮的过程中,按下按钮设置bool变量为true,抬起按钮设置为false,正常点击的情况下,按下的事件过短,animator还没有检测到bool变量的变化,所以会导致动画的切换不执行。处理办法:通过协程,让程序等待一段时间,等待u...
Unity3d在移动设备上的音效有延迟的解决方案
前几天刚解决了音效延迟的问题,通常如果不是特殊的要求,一般的按键音效有点延迟也不是什么问题,恰巧笔者的项目是一个音乐舞蹈类游戏,操作的时候音效延迟的要求就比较高,不然就明显和音乐节拍对不上了,经多方资料的查阅,现将解决方案分享出来。
Scrolling时图像有明显的闪烁和延迟,
我用C#在一个窗口上显示一幅非常大的图像,但在Scrolling时图像有明显的闪烁和延迟,我已经使用了buffering的技术,但仍然不能消除。 rn我不知道是我的buffering代码写得不怎么好,还是有其他原因???? rn请各位详细说明一个如何显示大图像而没有闪烁和延迟???? rn怎样的buffering代码才能解决这个问题????最好有代码给出,谢谢!!!!
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件