Ответы пользователя по тегу iOS
  • В каких случаях отменнее применять SQLite, а в каких Core Data?

    kaspartus
    @kaspartus
    Я бы в начальный уровень знания Core Data включил:
    - Знание основных элементов Core Data стека
    - Знание возможностей фреймвока(писать, например, можно не только в базу)
    - Умение писать/читать
    - Работа с простейшими свзяками

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

    Потом советую прочесть про NSFetchedResultsController, но в начале лучше почитать примеры без них.

    А так есть книжка "Pro Core Data for iOS", на хабре даже есть перевод первых 4 глав: habrahabr.ru/post/198242
    Ответ написан
    Комментировать
  • Как сделать переключатель между UITableView и UICollectionView?

    kaspartus
    @kaspartus
    Ну тут на свой вкус.
    - Можно положить UITableView и UICollectionView на одну вьюху и просто менять альфу.(Тут думаю и так все понятно)
    - Можно сделать красивый переход(гуглить "custom transition ios 7"), но это может поломать порядок UIViewController, если они лежат в UINavigationController.

    Из общих моментов:
    - Я бы вынес реализацию всех делегатных методов в отдельный класс, это сильно повысит читаемость класса UIViewController, которому они будут принадлежать.( www.objc.io/issue-1/lighter-view-controllers.html )
    - В качестве переключателя я бы использозвал UISegmentedControl, находящийся в верхнем баре, но никто не мешает придумать, что-то свое.
    Ответ написан
    Комментировать
  • Как перенести скомпилированное приложение под iOS на iphone?

    kaspartus
    @kaspartus
    После покупки сертификата действия примерно такие
    Для дебага - используется большую часть времени, если хотим дебажить не на симуляторе:
    1. Подключаете железку
    2. В XCode в Organizer находите ее и жмакаете на кнопку "Use for development"
    3. Теперь там где можно выбрать тот или иной симулятор вместо Device появится реальное устройство, выбираем его для деплоя
    3.1 Тут XCode может написать про профили/сертификаты и предложит выкачать их - соглашаемся
    4. Запускаем

    Если необходимо собрать релизную версию, то
    1. Опять же выбираем железку
    2. Product -> Archive
    3. После сборки нас кинет в Organizer, там жмем на Distribute
    4. Выбираем что хотим сделать: Ad Hoc - чтобы посмотреть релизную версию перед отправкой в аппстор, AppStore - отправить свое гениальное творение в магазин.
    Ответ написан
    1 комментарий
  • Как сделать вложенные таблицы в iOS?

    kaspartus
    @kaspartus
    Достаточно популярная либа: https://github.com/OliverLetterer/SLExpandableTableView
    Ответ написан
    Комментировать
  • Как лучше отфильтровать NSSDictionaty?

    kaspartus
    @kaspartus
    Я так понял, что в основном вопрос на тему выбора структуры сущностей. Для этого неплохо было бы увидеть сами запросы. Самое простое - это держать объект Предмет с полями: Название, Преподаватель, Кабинет/Место, Время начала, Продолжительность.

    Я бы напрямую биндил в сущности базы(с этой задачей отлично справится MagicalRecord), а далее уже фильтруем.

    Касательно фильтрации, как написал @morozovdenis, используется класс NSPredicate.

    Отдельно добавлю, что у любого фреймвока/либы для работы с базами уже наверняка есть встроенные возможности для фильтрации и сортировки, достаточно пробежаться по любому туториалу/докам.
    Ответ написан
    Комментировать
  • UIScrollView: как уложить текст/кнопки с сохранением их размера и местоположения?

    kaspartus
    @kaspartus Автор вопроса
    В итоге победил модифицировав вариант, где кнопки лежат на contentView и масштабируются вместе с самой картинкой(1 гифка).

    Решение:
    Подцепился через делегатный метод -(void)scrollViewDidZoom:(UIScrollView *)scrollView

    Там делаю трансформацию:
    btn.transform = CGAffineTransformMakeScale(1 / self.scrollView.zoomScale, 1 / self.scrollView.zoomScale);


    Думал что будет лагать, проверил на 100 кнопках - все работает идеально на третьей доске.

    p.s. обновил репу
    Ответ написан
    Комментировать
  • Какие подводные камни при использовании онлайн-конструктора приложений (iBuildApp etc.)?

    kaspartus
    @kaspartus
    Так надо соглашение читать, но вполне очевидным было бы, если приложение принадлежало вам.

    Еще про камни:
    - Плохая поддерживаемость, таких проектов море, и у каждого сообщество - два с половиной инвалида, вы потом не затащите никого этот проект править. Если возникают проблемы - опять же вы остаетесь один на один с поддержкой этой тулзы.
    - Отстает по возможностям от нативной библиотеки(скорее всего вы не смогли полностью оценить что можно реализовать, а что - нет), новые фичи после выхода новой оси будут появляться "спустя некоторое время".
    - Может лагать(пользователи привыкли, чтобы все было плавно и моментально отзывалось)

    Если денег мало, то непонятно что вы вообще хотите. Стоимость приложения состоит из 3 частей: разработка, дизайн, раскрутка. Слишком продешевив в любом из пунктов вы получите что-то невнятное, чем люди не захотят пользоваться/о чем не узнают.

    Если идеи стоящие и вы верите в успех, то возьмите кредит, или найдите спонсора.

    Совсем без денег ничего не выйдет, даже если вы найдете разраба - энтузиаста за долю, а дизайн вы вдвоем вымучаете в фотошопе, все равно деньги нужны будут на раскрутку.
    Ответ написан
    Комментировать
  • Как правильно подружить xib и storyboard для универсального приложения?

    kaspartus
    @kaspartus
    1. Ну самый простой но трудоемкий вариант держать два сториборда. Для ipad ~ipad после имени, но перед расширением.
    2. Можно попробовать держать один сториборд, там указать xibName.xib в сториборде, а на деле держать два варианта, для ipad опять же xibName~ipad.xib, по идее для доски он должен подцепить правильный xib, но я не пробовал.
    Ответ написан
    Комментировать
  • Как найти курсы программирования для начинающего IOS-разработчика в Киеве?

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

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

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

    Идеальный вариант: наличие наставника, который продумывает приложение, но не вытирает сопли по любому поводу, в совсем сложных вопросах готов все объяснить. Работа заключается в написании кучи небольших приложений разной тематики.
    Ответ написан
    1 комментарий
  • Откленение в аппстор магазине?

    kaspartus
    @kaspartus
    Ну в феврале удаляли само приложение vk. Поговаривают, что причина как раз в нарушении авторских прав.

    Если вы еще и сами файлы выкачиваете и позволяете ими делиться, то от этого лучше отказаться. А так скользкий вопрос, как я написал выше у вк самих не все так гладко. Я бы дал возможность прослушивать записи/кэшировать
    Ответ написан
    2 комментария
  • Как перенести provisioning profile i certificate на другой mac?

    kaspartus
    @kaspartus
    Так они все хранятся на яблочных серваках, просто выкачиваем:
    https://developer.apple.com/account/ios/certificat...

    Если не хочется по-простому, можно открыть Связку ключей(Keychain), найти все что надо, заэкспортить на одном и заимпортить на другом.
    Ответ написан
    Комментировать
  • Какие есть Objective-C репозитории приложений с грамотной структурой кода и паттернами?

    kaspartus
    @kaspartus
    К книжкам частенько идет репозиторий на гитхабе, можно посмотреть там. Еще есть cookbook'и, там есть готовые решения для кучи проблем.

    Если хочется углубиться в патерны, поищите какую-нибудь advanced книжку, там как раз и занимаются тем, что пытаются не просто сделать, а сделать правильно и читаемо, показывают приемы, которые не используют в туториалах из серии "лишь бы работало".
    Ответ написан
    1 комментарий
  • Как передать управление нажатием на объект в основной контроллер?

    kaspartus
    @kaspartus
    У вас всего один VC, логику мы должны писать только в контроллерах. Этот VC должен знать об этом tableView. Потому и делегатные методы tableView должны быть в этом контроллере, те что отвечают за создание ячейки, выбор ячейки и прочее, а значит и создаваться cardView будет в классе VC, но тогда вопросов об обработке тапов не возникает. Так что вы зря логику вынесли во View классы.

    Если хотим разделить логику, то нужен еще один VC2, который будет держать tableView, будет создавать карты, узнавать об их нажатии. При этом создавать его будет основной VC1 и сразу добавлять вью VC2 на свой. Вот тогда VC2 будет делегировать нажатия по картам в VC1.
    Примеров создания кастомных делегатов очень много, конкретный не посоветую, но они легко гуглятся.
    Ответ написан
  • Как вписать предложение в прямоугольник заданного размера?

    kaspartus
    @kaspartus
    В iOS7 при помощи Text Kit это можно сделать.

    Краткая история: Есть книжка iOS 7 by tutorials - там делают приложение-книжку, много текста, есть картинки, текст форматирован. Возникают логичные вопросы: "Как разбивать его на страницы? Как узнать сколько текста уместилось на странице?" - ответ прост, у NSLayoutManager есть метод glyphRangeForTextContainer: он возвращает кол-во символов в контейнере.

    Потому можем сделать так:
    1. Создаем NSTextStorage, скармливаем ему NSAttributedString.
    2. Создаем NSLayoutManager, отдаем его textStorage'y при помощи addLayoutManager
    3. Создаем NSTextContainer, отдаем его layoutManager'у
    4. Вот тут уже можем при помощи glyphRangeForTextContainer: узнать поместился текст или нет. Меняем шрифт, считаем еще раз. Можно например начать с 10 и расти вверх, как вылезли - взяли предыдущий размер.
    5. Создаем UITextView при помощи initWithFrame:textContainer:
    6. Успех

    Метод костыльный + overkill, работает только на iOS7+. Возможно при помощи textKit можно сделать все изящней, а возможно можно все аккуратно обойти.
    Ответ написан
  • Где найти статьи или книги по созданию простой галереи для IOS на русском?

    kaspartus
    @kaspartus
    На русском не знаю, а так я бы посоветовал погуглить iOS cookbook - там будут сразу примеры по каждому пункту, из кусочков соберете. На тему актуальности - смотрим книжки по iOS7.
    Ответ написан
    Комментировать
  • Как реализовать callback для обновления UI из http-запроса (NSURLSession)?

    kaspartus
    @kaspartus
    Блок completion нигде не выполняется и никуда не идет, он начинает выполняться, когда запрос выполнился так или иначе. А main thread никого ждать не должен. Просто в нужное время сессия вызовет completion-блок, действительно, не в главном потоке.

    Немного советов и схема. Возможно предложу не идеальный вариант.
    1. Выпиливаем все до создания сессии в отдельный метод, оно и логично - мы все подготавливаем к дальнейшей работе.
    2. Пишем отдельно метод, который создает таск, при помощи которого будем логиниться(то что в вашем методе после создания сессии). Создаем сам таск при помощи метода dataTaskWithRequest:completionHandler:, completion-блок вызовется когда таск выполнится тем или иным образом. Если успех - к п.3
    3. Вызываем отдельный метод внутри этого блока, где будем писать дальнейшую логику после логина, туда можно накидать создание других тасков. Метод лучше вызвать в главном потоке, т.к. наверняка захочется что-то сделать с UI.
    [self performSelectorOnMainThread:@selector(afterLoginLogicMethod) withObject:nil waitUntilDone:NO];


    P.S. По поводу callback'a от тасков
    Можно его получать через completion-блоки, а можно через делегатные методы, кому как удобнее.
    Ответ написан
    7 комментариев
  • Пройдет ли модерацию в AppStore приложение на UIWebView, которое будет отображать HTML версию сайта с сервера?

    kaspartus
    @kaspartus
    Читал истории, что для слишком простых приложений люди добавляли сверху дополнительный небольшой функционал. Еще как вариант можно навигацию сменить на нативную. Javascript отпиливает панельку навигации со страницы, используем UITabBarController например.
    Ответ написан
    Комментировать
  • Разчет высоты UITableViewCell по высоте текста?

    kaspartus
    @kaspartus
    Выглядит вполне толково, по идее должно работать, я бы тут предложил 2 варианта:
    1. Дебажим. Ставим брейкпоинты, логируем и прочее.
    2. В книжке видел пример для динамического расчета высоты ячейки.

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
      static UILabel* label; 
      if (!label) {
        label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, FLT_MAX, FLT_MAX)];
        label.text = @"test";
      }
      label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
      [label sizeToFit];
      return ceilf(label.frame.size.height * 1.7); 
    }


    Сам пробовал - работает. Думаю, переделать увеличение высоты с x1.7 на +2margin проблем не составит.
    Ответ написан
    Комментировать
  • Какой у вас опыт разработки мобильных приложений?

    kaspartus
    @kaspartus
    1) Препятствий бесконечно и всех их не перечислить, начиная от багов в стандартных библиотеках, заканчивая недостатком опыта.
    2) Маркетолог раскручивает, в основном банерная реклама, реклама в других приложениях, работает вроде неплохо. В зависимости от направленности приложения может хорошо сработать вирусная реклама, любимая история по теме: habrahabr.ru/post/173405
    3) Stackoverflow, книжки, внимательно следить за актуальностью знаний. Обе sdk быстро развиваются и меняются реализации, даже казалось бы базовых вещей. Экспериментировать, задавать вопросы и еще раз экспериментировать, без практики и набивания шишек прочитаные книжки/просмотренные лекции ничего не стоят.
    4) Картинки рисовал дизайнер в компании, в целом не было особых проблем то же нарисовать в фш самому. Дизайн важен, так как людям не связанным с программированием без разницы где вы храните данные, какие вы патерны используете, как вы красиво все распараллелили, но зато точно заметят небольшой косячок в UI. На самом деле есть куча примеров, когда приложение простейшее в реализации, но интерфейс очень красивый/оригинальный, и потому оно очень популярно.
    Ответ написан
    Комментировать