Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
#1

Собака в логине - Objective-C

19.05.2013, 19:27. Просмотров 1817. Ответов 28
Метки нет (Все метки)

Возможно, дурной вопрос, но я что-то туплю второй день.
Есть у меня логин к FTP-серверу вида username@host. На всякий случай уточняю. Это именно логин такой.
Задача - залить на этот ftp файлик. Соединение открываю через CFWriteStreamCreateWithFTPURL. Ей требуется connection string. Так вот вопрос: Как ее формировать?
Строка вида CFSTR("ftp://user@mysite.ru:pass@ftp.mysite.ru"); приводит к kCFErrorDomainCFNetwork error 200. CFSTR("ftp://user%64mysite.ru:pass@ftp.mysite.ru"); - тоже.
FileZilla логинится без капризов. Причем, я на 100% уверен, что с остальным у меня все нормально: если заменить логин на пользователя без собаки, все работает.
Никто с подобной бедой не сталкивался?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
19.05.2013, 20:01     Собака в логине #2
@ = %40, а не %64, %64 - это "d".

Попробуйте свою изначальную строку заURLэнкодить
Чтобы не вручную, как говорится

Добавлено через 6 минут
И так как NSString и CFStringRef кастуемы друг в друга, не заморачивайтесь, работайте с NSString, а потом просто кастуйте в (CFStringRef).
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
19.05.2013, 21:30  [ТС]     Собака в логине #3
Ой блин! Точно 40. Эк меня приглючило-то
Спасибо!
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.05.2013, 09:30     Собака в логине #4
Пожалуйста. С утра прочитал название темы... "Собака в логине"
- вспомнилось изречение старшего товарища -
Ааа... Воот где собака-то порылась
Здесь она получается, порылась в логине
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 11:10     Собака в логине #5
Objective-C
1
2
#define urlencode(str) CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8)
#define urlencodeansi(str) CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingWindowsCyrillic)
Objective-C
1
2
NSLog(@"%@",urlencode(@"ftp://user@mysite.ru:pass@ftp.mysite.ru"));
// ftp%3A%2F%2Fuser%40mysite.ru%3Apass%40ftp.mysite.ru
Vorona
Peace 2 all shining faces
666 / 528 / 45
Регистрация: 05.03.2010
Сообщений: 1,271
20.05.2013, 11:56     Собака в логине #6
Да перестаньте вы везде эти дефайны впихивать, есть же понятие метода, что за подход?
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 12:28     Собака в логине #7
Да перестаньте вы везде эти дефайны впихивать, есть же понятие метода, что за подход?
откуда такая ненависть к макросам?

есть же понятие метода
все в статический класс спихивать? "синглтон с улитилитами" TM ?

а может ваще в хелпер класс?

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// расширенная строка
 
@interface NSString (StringExt)
 
-(NSString*) ext_urlecode;
-(NSString*) ext_urlecodeansi;
 
@end
 
@implementation NSString (StringExt)
 
-(NSString*) ext_urlecode {
   return CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8)
}
-(NSString*) ext_urlecodeansi {
   return CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingWindowsCyrillic)
}
 
@end
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
20.05.2013, 13:22  [ТС]     Собака в логине #8
Цитата Сообщение от alexpac26 Посмотреть сообщение
откуда такая ненависть к макросам?
Из опыта поддержки. Они же нечитабельны.
Но за попытку спасибо. Хотя, zulkis уже скинул ссылку на правильное решение. "Все уже написано до нас"

Добавлено через 5 минут
Цитата Сообщение от alexpac26 Посмотреть сообщение
все в статический класс спихивать? "синглтон с улитилитами" TM ?
а может ваще в хелпер класс?
В категории соответствующих классов. Если очередной метод делает что-то полезное со строками, пишем категорию для NSString, если как-то по-хитрому массив сортирует - в категорию NSArray его. И так далее. И найти проще и читать привычно. Причем, не только автору
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 13:56     Собака в логине #9
как бы надо различать функции и методы как таковые

urlencode это функция, а не метод объекта

функция берет в качестве параметра аргумент и возвращает значение

если писать как метод то название у него сменится

NSString encodeAsUrlecode: и тп

и ваще

CFURLCreateStringByAddingPercentEscapes()
с СИ синтасисом писать не стремно, а вот если urlencode() который, аж в нескольких языках программирования является стандартной функцией уже сразу все: непонятно неочевидно и прочее
Vorona
Peace 2 all shining faces
666 / 528 / 45
Регистрация: 05.03.2010
Сообщений: 1,271
20.05.2013, 14:29     Собака в логине #10
ну как вы не поймете, что таким никто не пользуется, это неправильно с точки зрения ООП, тяжело в поддержке, интуитивно непонятно

какой хелпер, при чем тут синглтон с утилитами (хотя вы наверняка имели ввиду статический класс, у вас же нету данных, только методы)
выделите метод для этого и используйте его, если такая конструкция понадобится еще где-то, вынесите в категорию или отдельный объект
Я вот вам советовал почитать по рефакторингу литературу, даже М.Фаулер "Рефакторинг - Улучшение существующего кода"
такой подход называется "Выделение метода", вы выносите не совсем читабельный фрагмент кода в метод, название которого объясняет его назначение.

даже если юзать статическую переменную вместо дефайна, компилятор будет использовать только одну копию переменной и всем раздавать на нее указатель, а в случае с дефайн, он везде будет вставлять отдельную копию значения, что отразится на сорсах и нагрузке компилятора (не супер критично, но почему не писать по-человечески, читабельно и интуитивно ясно для других разработчиков, чем везде писать по-своему)

вы наверное не работали в команде хотя бы 5 человек с проектом на 2000 классов, где нужно за критическое время понять структуру и разобраться в коде и вы даже не представляете какое имеет значение для разработчика читабельный код

а если каждый начнет писать то, что ему где-то понравилось и, что он лично считает правильным, несмотря на других, без конвенций и стандартов, то ваш проект загнется на первом же или втором спринте.

Цитата Сообщение от alexpac26 Посмотреть сообщение
CFURLCreateStringByAddingPercentEscapes()
с СИ синтасисом писать не стремно, а вот если urlencode() который, аж в нескольких языках программирования является стандартной функцией уже сразу все: непонятно неочевидно и прочее
не стремно, потому что все ожидают увидеть именно эту функцию для решения данной задачи, а если стремно, то вынесите в отдельный метод, как я уже говорил выше
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 14:42     Собака в логине #11
проще говоря, стандарты "разработки в команде 5 человек с проектом на 2000 классов" сильно отличаются
от разработки практически индивидуального плана и требуют громоздкости, но соотвествия кода стандартам, чем его чистоты и лаконичности.

а в случае с дефайн, он везде будет вставлять отдельную копию значения, что отразится на сорсах и нагрузке компилятора
разница только в 0.01 % времени компиляции

Добавлено через 8 минут
а если стремно, то вынесите в отдельный метод
опятже если, вынести в метод, то темже ALT надо будет идти и смотреть что метод делает, а как иначе?

с макросом тоже самое, тогда в чем преимущества метода в 1 строку и макроса в 1 строку?

причем макрос занимает всего 1 строку в хедере, когда как методу нужен класс исполнения
у макроса правда не указан тип передачи, это да это минус
Vorona
Peace 2 all shining faces
666 / 528 / 45
Регистрация: 05.03.2010
Сообщений: 1,271
20.05.2013, 14:43     Собака в логине #12
в том-то и дело, что будет он не громоздким, а читабельным, понятным, готовым к изменениям, проще говоря конфеткой будет ваш проект, а не говнищем из 90х
может вы еще для краткости переменные называете strCp, rmDir, cnct ?
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 14:45     Собака в логине #13
может вы еще для краткости переменные называете strCp, rmDir, cnct
не угадали
что будет он не громоздким, а читабельным, понятным, готовым к изменениям
как бы не вижу связи между

приминением helper класса, макросов, сингтон с утилитами

и общей гибкости архитектуры проекта?

выше указанные инструменты не блокируют стандарты кода, а просто "упрощают" разработку
Vorona
Peace 2 all shining faces
666 / 528 / 45
Регистрация: 05.03.2010
Сообщений: 1,271
20.05.2013, 14:47     Собака в логине #14
Цитата Сообщение от alexpac26 Посмотреть сообщение
опятже если, вынести в метод, то темже ALT надо будет идти и смотреть что метод делает, а как иначе?
с макросом тоже самое, тогда в чем преимущества метода в 1 строку и макроса в 1 строку?
причем макрос занимает всего 1 строку в хедере, когда как методу нужен класс исполнения
у макроса правда не указан тип передачи, это да это минус
боже мой, да вы заядлый говнокодер и вам тут любой об этом скажет, несчастные те люди, которым прийдется писать с вами проекты и несчастные те заказчики, которые свяжутся с вами

преимущество метода в том, что он может легко использовать данные инстанса класса, а так же четко и понятно описывает часть его поведения

ладно, вам тут все-равно бестолку что-то объяснять и пытаться направить на путь хорошего и качественного программирования

говнокодьте себе на здоровье
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
20.05.2013, 14:54  [ТС]     Собака в логине #15
Предлагаю заканчивать.
alexpac26, попадете на серьезный проект, в серьезную команду, там вам все объяснят на практике отучат лениться (в наборе идентификаторов) и покажут преимущества code completion Единственная беда - переучиваться придется. Потому как, поверьте старому небритому дядьке, ни один разумный PM на своем проекте такого безобразия не потерпит. Стандарты кодирования, они как правила дорожного движения - потом и кровью писаны.
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 14:56     Собака в логине #16
все переучиваются

проста как бы стандарты стандартами но у каждой "команды" же есть свои "фишки"
свои "компоненты" "классы" и прочие инструменты, не все же с молотком и гвоздями собирается
Vorona
Peace 2 all shining faces
666 / 528 / 45
Регистрация: 05.03.2010
Сообщений: 1,271
20.05.2013, 14:59     Собака в логине #17
Цитата Сообщение от alexpac26 Посмотреть сообщение
приминением helper класса, макросов, сингтон с утилитами
да не синглтон, а статический класс, вы же методы выносите а не данные...
какой хелпер класс? вы его так и называете HelperClass?

как насчет дебага, как насчет того, что макросы не могут работать в рантайме, а только на этапе компиляции
боже да в интернете миллион людей говорит что не стоит использовать макросы если можно вынести код в функцию\метод

хотя бы тут
http://stackoverflow.com/questions/5...acro-vs-method
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
20.05.2013, 15:02  [ТС]     Собака в логине #18
Цитата Сообщение от Vorona Посмотреть сообщение
как насчет дебага, как насчет того, что макросы не могут работать в рантайме, а только на этапе компиляции
Зачем дебаг? Писать надо правильно! Без ошибок! И никакой дебаг не нужен :-P

Да, на всякий случай:
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
20.05.2013, 15:04     Собака в логине #19
как насчет дебага, как насчет того, что макросы не могут работать в рантайме
баг в макросе? о да откуда там может быть баг?

боже да в интернете миллион людей говорит что не стоит использовать макросы если можно вынести код в функцию\метод
зачем тогда они не дать хедеру 2 раз через компилятор пройти? вот их истинное предназначение?

#ifndef

#endif
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 15:09     Собака в логине
Еще ссылки по теме:

Использование прокси при логине C#
Зависает на логине после установки родного драйвера на встроенную видеокарту
Windows 10 Моргание экрана при логине
Символ & в логине tstringlist (Indy,IDHTTP) Delphi
ASUS 6870 (EAH6870 DC/2DI2S/1GD5) - черный экран при логине, в безопасном работает

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
666 / 528 / 45
Регистрация: 05.03.2010
Сообщений: 1,271
20.05.2013, 15:09     Собака в логине #20
зачем тогда goto в С?
может вы и его юзаете раз оно там есть?

для строк, значений глобальных (что тоже есть плохо в 21 веке)

ладно, не буду больше спорить, удачи вам в вашей карьере с таким подходом
Yandex
Объявления
20.05.2013, 15:09     Собака в логине
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru