Squ*_*tch 5 iphone ftp objective-c ios ios5
我正在尝试创建一个具有一些非常基本的FTP功能的iOS 5应用程序,需要一些指导.它将连接到本地网络上的设备,并使用.dat/txt文件执行读/写操作.我已经做了一些搜索过去的几天,并看到了各种建议,但没有什么简单,我可以拿起并快速修改我个人使用.
我的问题是这些:
最后,我应该提一下,我已经花了相当多的时间来分析来自Apple的SimpleFTPSample,但是示例代码为每个示例提供了"连接失败"和"流开放错误"通知,因此我对它有点警惕实用性.
请原谅我,如果这已在其他地方得到解答.所有相关的帖子都有我需要的答案,但不是全部.先感谢您!
为清晰起见编辑:一个明确定义的示例或分步教程是我真正想要的.我自己的谷歌搜索没有发现,我迫切需要一些指导.
更新: 很久以前我发布了这个问题,但继续使用接受的答案中提到的FTPHelper.我最近刷掉了旧项目的灰尘,并意识到FTPHelper的获取功能中存在轻微的内存泄漏,如果反复调用,它可以成为app-killer.如果anybdy偶然发现这个问题并选择使用FTPHelper,请务必添加下面代码中的CFRelease行.
- (void) fetch: (NSString *) anItem
{
if (!self.uname || !self.pword) COMPLAIN_AND_BAIL(@"Please set user name and password first");
if (!self.urlString) COMPLAIN_AND_BAIL(@"Please set URL string first");
NSString *ftpRequest = [NSString stringWithFormat:@"%@/%@", self.urlString, [anItem stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
/* CFShow(ftpRequest); */
NSString *writepath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
self.filePath = [writepath stringByAppendingPathComponent:anItem];
CFURLRef writeURL = CFURLCreateFromFileSystemRepresentation (NULL, (const UInt8 *) [writepath UTF8String], [writepath length], NO);
MySimpleDownload((CFStringRef)ftpRequest, writeURL, (CFStringRef) self.uname, (CFStringRef)self.pword);
CFRelease(writeURL);//ADD THIS LINE TO FIX MEMORY LEAK
}
Run Code Online (Sandbox Code Playgroud)
SimpleFTPSample应用程序运行完美,可能存在您无法看到的问题.我可以推荐你(除了Apple的例子)是检查这个包含所有基本FTP操作的助手类的例子.有一点需要注意的是iOS 5 ARC.Apple的示例和我链接的示例都适用于较旧的iOS版本.
在iOS 5中基本上有两种方法可以使用它们 - 通过-fno-objc-arc在[你的项目]中添加标志告诉编译器不使用ARC - >目标 - > [你的应用] - >构建阶段 - >编译源 - > [你的文件],或者使用Xcode中的内置工具转换为ARC.
我个人只测试了第一种方法,它对我有用.
如果这对你没有帮助我可以写一个例子,但不幸的是今天我很忙.
更新:
基本机制是用于[FTPHelper list:THE_FTP_URL]列出文件夹的内容,然后使用内容创建一个列表,具体取决于使用的类型(文件或文件夹)下载[FTPHelper download: THE_FTP_URL_WITH_THE_FILENAME_FROM_LISTING].从这里你必须实现
- (void) downloadFinished
{
//do the reading depending on the file type
NSData *data = [NSData dataWithContentsOfFile:[FTPHelper sharedInstance].filePath];
}
Run Code Online (Sandbox Code Playgroud)
上传以类似的方式实现 - 使用[FTPHelper upload:FILE_TO_UPLOAD]文件系统中的文件.