我正在尝试使用Chilkat库从我的ftp服务器获取目录文件列表。 在这种情况下,我想在进程运行时动画UIActivityIndicatorView。但问题是,UIActivityIndicatorView永远不会开始动画。我使用的代码是:
[self.activityIndicator startAnimating];
[selfgetListFromPath:ftpPath withConnection:ftpConnect];
[self.activityIndicator stopAnimating];
activityIndicator是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可能有不好的做法?
有人可以告诉我
谢谢
答案 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:]
将控件返回给主线程,这将停止微调器动画。