Ios 在运行循环中放置布尔值False,而

Ios 在运行循环中放置布尔值False,而,ios,ftp,uiactivityindicatorview,chilkat,Ios,Ftp,Uiactivityindicatorview,Chilkat,我正在尝试使用Chilkat库从ftp服务器获取目录文件列表。 在本例中,我希望在进程运行时设置UIActivityIndicatorView的动画。但问题是,UIActivityIndicatorView永远不会启动动画。我使用的代码是: [self.activityIndicator startAnimating]; [selfgetListFromPath:ftpPath withConnection:ftpConnect]; [self.activityIndicator stopAni

我正在尝试使用Chilkat库从ftp服务器获取目录文件列表。 在本例中,我希望在进程运行时设置UIActivityIndicatorView的动画。但问题是,UIActivityIndicatorView永远不会启动动画。我使用的代码是:

[self.activityIndicator startAnimating];
[selfgetListFromPath:ftpPath withConnection:ftpConnect];
[self.activityIndicator stopAnimating];
activityIndicator是
UIActivityIndicatorView
的对象,
ftpPath
是FTP服务器中我的文件路径的NSString,
getListFromPath
是使用Chilkat算法从FTP服务器获取列表的方法,
ftpConnect
是FTP连接类的对象

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

[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
动画化,还启动了
getListFromPath
函数。但是我对这个密码有疑问,我对这个密码正确吗?或者可能存在使用nsrunlop的错误做法? 谁能告诉我


谢谢你

我不知道Chilkat库,但它一定有某种方式告诉你,你收到了来自ftp服务器的答复。当您得到它时,您应该使用NSNotification或协议来告诉您的视图控制器您得到了答案。发生这种情况时,请停止旋转器

此代码在“黑盒”中运行:

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

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

使用以下方法:

[NSObject performSelectorInBackground:withObject:]
要启动getListFromPath线程,完成后,调用

[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]

将控制权交还给主线程,主线程将停止微调器动画。

我从FTP服务器上得到了答案,并且我有了想要获得的所有列表,但问题是,我无法启动activityIndicator进行动画制作。但我的最后一个密码,让我能做到。问题是,我只是怀疑那些代码,我能做到吗?我不认为你的最后一段代码是正确的方法。您需要确保您得到了答案,只需要使用我所做的最后一个代码停止微调器,在显示文件列表后,微调器将停止。你能告诉我另一种方法吗?告诉我一件事,Chilkat库是否为你提供了某种gotResponseFromServer方法?嗯,我认为Chilkat库中有这样一种逻辑忘了告诉你:只要记住总是在主线程上进行UI更新。谢谢你的回答,但如果我使用performSelectorInBackground:withObject:,它会让我不得不使用@selector(getListFromPath:),对吗?ftpPath参数如何?如果没有该参数,我无法获取目录文件列表,您能给我另一条线索吗?您必须创建一个
threadedGetListFromPath
方法,该方法将设置自动释放池,并从内部启动getListFromPath。然后,从主线程调用
[self-performSelectorInBackground:@selector(threadedGetListFromPath)]
ftpPath
只要是同一类的私有成员(variabe),就仍然可以通过该方法访问。注意不要修改它,因为您可能会遇到并发问题。也许可以看看这篇介绍:嗯……我不明白,您能给我一个threadedGetListFromPath方法的示例吗?最后,我找到了答案,这个链接帮助我找到解决方案
[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]