iOS базовая настройка FTP; Читать и писать поток - PullRequest
5 голосов
/ 12 марта 2012

Я пытаюсь создать приложение для iOS 5 с некоторыми базовыми функциями FTP и мне нужно руководство. Он будет подключаться к устройству в локальной сети и выполнять операции чтения / записи с файлами .dat / txt. Я провел несколько поисков за последние несколько дней и видел различные рекомендации, но ничего достаточно простого, чтобы я мог подобрать и быстро изменить для личного использования.

Мои вопросы:

  1. Есть ли какие-нибудь учебные пособия / примеры кода, которые вы могли бы порекомендовать мне?
  2. С какими платформами и классами мне следует работать для базовых операций чтения / записи?

Наконец, я должен отметить, что я уделил значительное количество времени анализу SimpleFTPSample от Apple, но в этом примере кода выдается уведомление «Сбой подключения» и «Ошибка открытия потока» для каждого примера, поэтому я немного опасаясь его полезности.

Простите, если на этот вопрос ответили в другом месте. У всех связанных должностей есть части ответа, в котором я нуждаюсь, но не вся вещь. Заранее спасибо!

РЕДАКТИРОВАТЬ для ясности: мне бы очень хотелось, чтобы был четко определенный пример или пошаговое руководство. Мои собственные поиски в Google ничего не дали, и я отчаянно нуждаюсь в некотором руководстве здесь.

UPDATE: Я задал этот вопрос давно, но продолжил использовать FTPHelper, упомянутый в принятом ответе. Недавно я стряхнул пыль со старого проекта и понял, что в функции выборки FTPHelper есть небольшая утечка памяти, которая может вызывать убийства приложений, если ее вызывать повторно. Если кто-нибудь наткнется на этот вопрос и решит использовать 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 
}

Ответы [ 2 ]

7 голосов
/ 14 марта 2012

Приложение SimpleFTPSample работает отлично, возможно, есть проблема, которую вы не видите. Что я могу порекомендовать вам (кроме примера Apple), так это проверить ЭТОТ пример, который содержит вспомогательный класс для всех основных операций FTP. Одна вещь, о которой следует знать, это iOS 5 ARC. И пример Apple, и тот, который я привел, относятся к более старым версиям iOS.

Есть в основном 2 способа использовать их в iOS 5 - указав компилятору не использовать ARC, добавив флаг -fno-objc-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];
}

Загрузка осуществляется аналогичным образом - с использованием [FTPHelper upload:FILE_TO_UPLOAD] с файлом из файловой системы.

4 голосов
/ 14 марта 2012

Есть много библиотек, которые вы можете использовать, и они прекрасно работают. :)

Например:

http://www.chilkatsoft.com/ftp-objc.asp

http://code.google.com/p/ios-ftp-server/

Я рекомендую использовать их, потому что написание одного кода заняло бы много времени :) Как сказал o15a3d4l11s2, нужно помнить об ARC. Если вы используете его, не забудьте добавить флаги сборки в библиотеки, которые не являются ARC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...