在runloop中放置一个布尔值False

时间:2011-07-12 09:34:29

标签: ios ftp uiactivityindicatorview chilkat

我正在尝试使用Chilkat库从我的ftp服务器获取目录文件列表。 在这种情况下,我想在进程运行时动画UIActivityIndi​​catorView。但问题是,UIActivityIndi​​catorView永远不会开始动画。我使用的代码是:

[self.activityIndicator startAnimating];
[selfgetListFromPath:ftpPath withConnection:ftpConnect];
[self.activityIndicator stopAnimating];

activityIndi​​cator是UIActivityIndicatorView的对象,ftpPath是FTP服务器中文件路径的NSString,getListFromPath是使用Chilkat算法从FTP服务器获取列表的方法,{ {1}}是FTP连接类的对象。

我在调用ftpConnect函数之前尝试使用NSRunLoop,因此我将代码更改为:

getListFromPath

这使得[self.activityIndicator startAnimating]; BOOL waitingOnProcessing = YES; NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop]; while (waitingOnProcessing && [currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { } [self getListFromPath:ftpPath withConnection:ftpConnect]; [self.activityIndicator stopAnimating]; 动画,但activityIndicator从未被解雇。试用后,我选择将我的代码再次更改为:

getListFromPath

它使[self.activityIndicator startAnimating]; BOOL waitingOnProcessing = YES; NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop]; while (waitingOnProcessing && [currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { waitingOnProcessing = NO; } [self getListFromPath:ftpPath withConnection:ftpConnect]; [self.activityIndicator stopAnimating]; 动画化,并且还触发了activityIndicator函数。但我怀疑这段代码,我对这段代码是对的吗?或者使用NSRunLoop可能有不好的做法? 有人可以告诉我

谢谢

2 个答案:

答案 0 :(得分:0)

我不知道Chilkat库,但它必须有一些方法告诉你从ftp服务器收到答案。当你得到它时,你应该使用NSNotification或协议告诉你的视图控制器你得到了答案。当发生这种情况时,你会停止微调器。

答案 1 :(得分:0)

此代码在“黑匣子”中运行:

[self.activityIndicator startAnimating];
[self getListFromPath:ftpPath];
[self.activityIndicator stopAnimating];

因此,当您的方法返回时会发生UI更新,您将看不到更新。

您需要做的是startAnimating您的活动指示器,然后在另一个线程中启动getListFromPath。当该方法终止时,您回调主线程,告诉它停止启动指示器。

使用此方法:

[NSObject performSelectorInBackground:withObject:]

启动你的getListFromPath线程,然后当它完成时,调用

[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]

将控件返回给主线程,这将停止微调器动画。