Операции с NSString проблематичны для протокола схемы (например, "ftp: //"), потому что, как только вы измените вашу строку NSString, она заменит любую последовательность символов "/" уникальным "/".
Фактически, это становится проблематичным с «/», когда вы используете любую функцию «pathComponent» или «path» из класса NSString, которая будет возвращать не объект NSString, а объект класса NSPathStore2. Это тот класс (NSPathStore2), который делает забавные вещи с "/".
Затем, когда вы попытаетесь использовать его для создания NSURL, произойдет сбой, потому что начало адреса становится "ftp: /myhost/mypath/myfile.ext". Один "/" отсутствует после "ftp: /".
Чтобы избежать этой проблемы, вот что я сделал быстро:
NSString *myPath = [[@"ftp:%2F%2FmyFtpDomain/myPath"
stringByAppendingPathComponent:@"myFilename.ext"]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Я избежал "/" при создании адреса по его экранированному коду% 2F и, наконец, удалил их.
Для пассивного режима используйте свойство 'kCFStreamPropertyFTPUsePassiveMode' вашего NSStream:
[_outputStream setProperty:( _passiveMode ? (id)kCFBooleanTrue : (id)kCFBooleanFalse ) forKey:(id)kCFStreamPropertyFTPUsePassiveMode]