
Artyom
11.08.2016
12:20:46
Плюс запрос может просто напросто зафейлиться, значит нужно еще и различать стейты, когда запрос выполняется, а когда он уже выполнен (чтобы при нажатии кнопки знать, нужно ли отправлять запрос заново или нужно ждать)
Вариант с флагами вообще адский

Ivan
11.08.2016
12:22:17
Так второй же отправляем уже при нажатии на кнопку?просто один флаг на первый запрос.

Artyom
11.08.2016
12:22:57

Konstantin
11.08.2016
12:23:24
можно отключить кнопку, пока первый запрос не завершится ?

Google

Artyom
11.08.2016
12:23:47
это чит)

Konstantin
11.08.2016
12:24:51
я бы делал на ReactiveCocoa, там вообще без единого флага всё было бы
но боюсь, меня сейчас обвинят в навязчивости)

Artyom
11.08.2016
12:26:48
Через GCD кто-нибудь делал подобное? (dispatch_suspend)

Maxim
11.08.2016
12:29:20
- (BFTask *)request1;
- (BFTask *)request2;
- (void)viewDidLoad
{
self.req1 = [self request1];
}
- (void)handleClick
{
__weak weakSelf = self;
[self.req1 continueWithSuccessBlock:^id(BFTask *task) {
[weakSelf request2];
}];
}

Maxx
11.08.2016
12:32:16
а не проще в NSOperationQueue добавить dependency ? вторая операция зависит от первой
в том смысле, что сформировать queue, поместить туда op1 + op2 (addDependency: op1)

Artyom
11.08.2016
12:35:28
Да проще наверное, но вот решил спросить, делал на практике так кто-нибудь из здесь присутствующих. Мало ли какие подводные камни

Maxx
11.08.2016
12:36:41
в NSOperation никаких подводных камней, можно вручную всё отрегулировать, очередность, зависимости

Artyom
11.08.2016
12:37:12
А если первый запрос зафейлился, операция-то будет считаться выполненной
Ну да, без флагов тут в любом случае не обойтись

Maxx
11.08.2016
12:38:56
так мы всё равно к коллбэку апеллировать должны - что получили в обратку при 1ом запросе, то имеем, нетворкинг ерроры никто не отменял

Haile
11.08.2016
12:39:36
так а почему нельзя заблочить кнопку то, пока первый запрос не вернулся?

Google

Artyom
11.08.2016
12:40:53
Потому что некрасиво это
Ясное дело, что можно все заблочить, показать спиннер на весь экран и задача решена

Александр
11.08.2016
12:42:13
о какой красоте речь вообще, если кнопка явно должна слать запрос

Maxx
11.08.2016
12:42:20
просто смысла от кнопы никакого, пока op1 в процессе

Александр
11.08.2016
12:42:49
а молча не отсылать запрос когда юзер жамкает на нее, потому что не пришло еще ответа - красиво?
я бы просто кнопку задизейблил

Евгений
11.08.2016
12:43:14
можно вместо кнопки активити маленький повесить)

Maxx
11.08.2016
12:43:33
но тоже выглядит странно: загрузилась вьюха, кнопка disabled, чо куда кому - неясно
UI хромает
гипс снимают, юзер уходит

Alexey
11.08.2016
12:43:50

Artyom
11.08.2016
12:44:13
Пользователь, попадая на экран, видит кнопку
Он сразу её жмякает и ждет (ему плевать сколько там запросов)
Это лучше, чем он сначала ждет, потом жмякает, потом опять ждет

Александр
11.08.2016
12:45:01
фидбэк с юзером какой вообще, ну то есть как юзер понимает, что он нажал кнопку и да, "что-то произошло"
?

Maxx
11.08.2016
12:45:13
мож ему картиночку какую анимашку показать, пока op1 отправляет - получает данные?

Александр
11.08.2016
12:45:22
а то тут вопрос больше не технический по-моему, а к UX

Artyom
11.08.2016
12:46:14
Ок, ладно, вот рассказываю прямо как есть.
Наше приложение рассчитано не под одного клиента, поэтому у нас используются динамические адреса API.
Попадая на экран логина, пользователь хочет сразу жмякнуть кнопку входа, а не ждать, пока подгрузятся url ки.
Прятать куда-то, дисейблить эту кнопку не вариант
Раньше у нас была загрузка перед переходом на экран авторизации, но такой вариант, ясное дело, никому не нравится

Google

Евгений
11.08.2016
12:51:29
я бы предложил вернуться к очереди, как предлагали, а если фейлится интернет, то показывать алерт с ним — так сразу будет понятно, что кина не будет.
а если с интернетом все ок, то и с очередью будет все ок.

Haile
11.08.2016
12:51:46
так а какая разница, если у вас все равно кнопка неработает, пока первый запрос не завершится?
буду я теребить эту кнопку, пока там запрос придет первый
толку мне?
никакого отклика от UI

Artyom
11.08.2016
12:52:07
Можно, коненчо, начать выполнять запрос №1 после нажатия кнопки, а затем в коллбеке запрос №2, но в таком случае пользователь будет дольше ждать

Haile
11.08.2016
12:52:11
не понятно, толи она просто не работает

Евгений
11.08.2016
12:52:38
так ты теребить будешь и пока второй вопрос будет обрабатываться, это уже другая задача, на мой взгляд

Artyom
11.08.2016
12:52:41

Евгений
11.08.2016
12:52:45
*запрос

Александр
11.08.2016
12:53:10
то есть отклик есть

Maxim
11.08.2016
12:53:11
А что будете делать, если первый запрос в фоне зафейлился?

Haile
11.08.2016
12:53:49
+

Евгений
11.08.2016
12:54:02
зафейлиться он может только если интернет упадет

Artyom
11.08.2016
12:54:22

Haile
11.08.2016
12:54:25
ну вот он взял и упал

Евгений
11.08.2016
12:54:57
ну вот на алерт
в сафари если нет интернета то большая надпись висит что нет интернета

Haile
11.08.2016
12:55:21
ну вот если твой экран - 2 кнопки и 2 запроса, зачем тебе туда тащить реактивку?

Google

Haile
11.08.2016
12:55:24
чем плохи 2 флага?

Artyom
11.08.2016
12:55:34
Запрос упал, был отправлен при входе на экран – не будет алерта
Запрос упал, был отправлен при нажатии на кнопку – будет алерт

Haile
11.08.2016
12:56:58
если у тебя все приложение повязано на реактивку - добавить реактивку и сюда
если дальше ожидаются такие же проблемы - взять реактивку
или накидать свою асинхронную операцию с композицией
и использовать их

Konstantin
11.08.2016
12:58:37
дело говорит

Artyom
11.08.2016
13:01:11
Из вышеизложенного можно выделить 4 варианта: флаги, nsoperationqueue, bolts, reactive
Спасибо

Maxim
11.08.2016
13:02:04
https://gist.github.com/maximgavrilov/a4f2233d4f134feb92ff286833af9c97

Artyom
11.08.2016
13:03:23

Maxim
11.08.2016
13:04:06
Ну, реактивка тут выглядит слишком перегруженно, это всё-таки классическая задача на promise, если хочется чего-то большего, чем флаги

Александр
11.08.2016
13:04:49
имхо тут хватило бы флагов
оверинжинеринг какой-то на ровном месте иначе

Maxx
11.08.2016
13:07:41
тут всё-таки таски и dependency, или NSOp, или Bolts - удобно

NIKOLAY
11.08.2016
13:26:53
Ребята, подскажите. Можно ли создать приватный framework с закрытым кодом, в котором используются зависимости в виде pods?

Евгений
11.08.2016
13:30:07
я фреймворки не создавал, но использую один приватный с закрытым кодом, он использует разные открытые библиотеки и требует их подключение в любом удобном виде

NIKOLAY
11.08.2016
13:32:36
А как он создавался?

Евгений
11.08.2016
13:42:51
а вот это не знаю — он совсем чужой
а, сори, ввёл немного в заблуждение.
на самом деле он не дистрибьютится как цельный фреймворк

Denis
12.08.2016
00:34:16
Супер https://developer.apple.com/news/?id=08082016a

Google

Artem
12.08.2016
03:59:12
Если есть ограниченное число запросов, которые надо выполнить последовательно (наример 2-3), я обычно обработку делаю в блоках и просто делаю вложенный запрос в блоке, т.е.
первый_запрос:^(){
обработка_результатов_первого запроса;
второй_запрос:^(){
обработка_общего_результата;
}
}
Ну можно конечно через RAC компоновать, удобно, когда сложные интерфейсы.

Илья
12.08.2016
11:46:28
Подскажите, что можно использовать что-то типа IMEI, чтобы привязать к девайсу аккаунт, но при этом его пропустили в ходе ревью

Igor
12.08.2016
11:47:11
генерируешь рандомный UDID и сохраняешь в кейчейн

Maxx
12.08.2016
12:43:33
NSUUID

Семён
12.08.2016
15:15:54
identifier for vendor

Artyom
12.08.2016
17:41:43
Подскажите, через что можно дистрибьютировать Watch приложение? (кроме TestFlight)

Artem
12.08.2016
17:42:51
Fabric.io

Roman
12.08.2016
17:43:09

Artyom
12.08.2016
18:03:13
Fabric.io
А лично пробовал? (именно Watch)
Терзают смутные сомнения

Artem
12.08.2016
18:08:50
А чет про часы упустил. Часы не пробовал.

Сергей
12.08.2016
18:11:34
Приложения для часов никак не отличаются от приложений для iPhone
Можете хоть в Dropbox .ipa файл выкладывать

Artyom
12.08.2016
18:13:11

Roman
12.08.2016
18:14:04

Сергей
12.08.2016
18:14:12
Поддержка Watch не требуется, бандл для часов зашивается в .ipa файл. Мы распространяли приложения для часов как через TF, так и через Fabric, Diawi и так далее
Крашей на часах вообще нигде не увидите - такого просто не придумали еще
Хотя я могу ошибаться, давно это было)

Artyom
12.08.2016
18:15:42
Только я хотел написать "Круто, буду пробовать")