使用流计划时,Runloop不会被解雇

时间:2011-06-17 05:31:19

标签: objective-c ios ftp stream nsthread

我正在为我的项目做一个FTP客户端。我已经使用runloop安排readstream / writeStream从硬盘读取文件/将文件写入硬盘并将其发送到服务器。上传并下载文件后,我从runloop取消计划流。这在我第一次发送文件时工作正常。我第二次尝试发送文件。使用运行循环创建和调度流。但是运行循环并不会激发。我不知道。任何人都可以帮助我

以下是我用来安排和取消安排的代码

上传

readStream=CFReadStreamCreateWithFile(kCFAllocatorDefault, fileURL);
writeStream=CFWriteStreamCreateWithFTPURL(kCFAllocatorDefault,(CFURLRef ) ftpURL);
BOOL readStreamOpened=CFReadStreamOpen(readStream);
BOOL clientCallBackSet=CFWriteStreamSetClient(writeStream, kNetworkEvents, MyUploadCallBack, &callBackContext);

CFWriteStreamScheduleWithRunLoop(writeStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
CFReadStreamUnscheduleFromRunLoop(syncStructure->readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

下载:

readStream=CFReadStreamCreateWithFTPURL(kCFAllocatorDefault,(CFURLRef)ftpURL);
writeStream=CFWriteStreamCreateWithFile(kCFAllocatorDefault,fileURL);
Boolean writeStreamOpened=CFWriteStreamOpen(writeStream);
BOOL status= CFReadStreamSetClient(readStream, kNetworkEvents,MyDownloadCallBack,& callBackContext);
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
CFWriteStreamUnscheduleFromRunLoop(syncStructure->writeStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

任何人都可以帮助我。我已经开了2天了。

1 个答案:

答案 0 :(得分:0)

几天后,我解决了这个问题。我使用参考指南中提到的轮询方法检查了代码。当我这样做时,我注意到问题在于我的ftp服务器中的超时设置。服务器超时后,它没有接受任何连接,因此我的runloop正在等待调用回调函数