objective-c - Runloop 在使用流进行调度时不会被触发

标签 objective-c ios ftp stream nsthread

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

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

用于上传

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 天。

最佳答案

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

关于objective-c - Runloop 在使用流进行调度时不会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381713/

相关文章:

iphone - IOS 5 - XCode 4 - 应用程序启动时的 SIGABRT

ios - 以编程方式从 Facebook 注销 iOS

ios - 如何在 Xcode 中打开 .srt 文件?

objective-c - NSRunningApplication 没有特定的应用程序窗口

iOS Retina 4"启动图像;多个目标坚持使用相同的图像

ios - 点击 iOS 7 时更改背景图像并为 UIButton 设置动画

ios - 在指定时间执行方法

ftp - 通过 VPN 连接到 FTP

redirect - 通过ssh隧道进行ftp

c# - e.TotalBytesToReceive 返回 -1