Ответы пользователя по тегу iOS
  • Как программно очистить кэш в (Sandbox/Library/Caches) в ios7?

    Flanker_4
    @Flanker_4
    1) Попробуйте удалять не всю папку, а ее содержимое
    2) Вы уверены, что Вам нужна папка с кэшем, а не временная папка (Temp), имхо там логичней бы смотрелись данные, которые удаляются. хотя....
    Ответ написан
  • Как обработать ошибку, когда сайт, к которому обращается программа, недоступен?

    Flanker_4
    @Flanker_4
    Возможно Вы забыли вызвать startNotifier
    т.е. код должен выглядеть так
    _hostReachable = [Reachability reachabilityWithHostName: host];
     [_hostReachable startNotifier];


    Ну и плюс ко всему, он там бросает нотификацию kReachabilityChangedNotification
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

    на которую следует ориентироваться как-то так

    -(void) checkNetworkStatus:(NSNotification *)notice
    {
        //Проверяем есть ли доступ в интернет.
        NetworkStatus internetStatus = [_internetReachable currentReachabilityStatus];
        if (internetStatus==NotReachable) {
           ....
        }
        ...
     }
    Ответ написан
    Комментировать
  • Реализация теста для iOS?

    Flanker_4
    @Flanker_4
    а зачем то 20 контроллеров?
    Обычно на сцену добавляется один UIScrollView (с включенным пейджингом), в него суется два (три) контроллера, отображающих по вопросу и дальше во время перелистывания пользователем они тусуются, как колода карт (эдакий аналог UITableView но с одной видимой ячейкой на экран)

    Да и вообще, для вашей задачи просто идеально подходит UIPageViewControllerClass
    Ответ написан
    Комментировать
  • Как остановить UIActivityIndicatorView?

    Flanker_4
    @Flanker_4
    1) все же stopAnimation
    2) outlet не установлен
    Ответ написан
    Комментировать
  • Есть ли способ для отключения прокрутки tableview?

    Flanker_4
    @Flanker_4
    Если я Вас правильно понял, то Вам нужно установить свойство bounces в NO. Можно прямиком в Interface Builder'e, или кодом:
    tableView.bounces = NO;
    Без примера проекта сложно сказать точнее

    Хотя, имхо, это делает прокрутку "деревянной" и я бы не отключал.

    P.S. судя по скриншоту у Вас там какая-то лажа с иерархией вьюшек, ибо видно, что ячейки 1/2/3 не скролятся дальше, а вот пн/вт/ скролятся. И bounces всего лишь скроет симптомы, но не исправит проблему...
    Ответ написан
    Комментировать
  • Работа с NSManagedObject в разных тредах с помощью MagicalRecords?

    Flanker_4
    @Flanker_4
    В MR специально для этого есть набор методов

    /* For all background saving operations. These calls will be sent to a different thread/queue.
     */
    + (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block;
    + (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;
    
    /* For saving on the current thread as the caller, only with a seperate context. Useful when you're managing your own threads/queues and need a serial call to create or change data
     */
    + (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block;
    
    /*
     If you want to reuse the context on the current thread, use these methods.
     */
    + (void) saveUsingCurrentThreadContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;
    + (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block;


    Т.е. то что Вы хотите сделать:
    //пишу по памяти, могу где-то ошибиться
    [MagicRecord saveWithBlock:^(NSManagedObjectContext *localContext){
        Artist *artist = [Artist createInContext: localContext];
        artist.title = @"Eminem";
    
           Album *album = [Album createInContext: localContext];
            album.title = @"Album 1";
    
            [artist addAlbumObject:album]; //этот метод, или подобный ему должен автоматически сгенерироваться если Вы правильно генерируете классы Artist|album
    }];
    Ответ написан
    2 комментария
  • NSUTF8StringEncoding неверно декодирует, как исправить?

    Flanker_4
    @Flanker_4
    Ну вот опять же, Вы привели всего лишь маааааленькую часть кода, и нам теперь сиди гадай, я вообще удивлен , что @corristo решил откликнуться :D

    Если все остальное ок, как Вы говорите, то возможно проблема в buf? В нем точно выделяется нужный размер?
    а еще вот сюда стоит заглянуть stackoverflow.com/questions/9701776/nsutf8stringen... мало ли, может там и правда не UTF (там есть пример кода, позволяющий посмотреть кодировку, и поддерживается ли она вообще)

    You say that it “is definitely UTF-8”, but without a Content-Type header, you don't really know that. (And even if you did have a header saying that, it could still be wrong.)

    My guess is that your data is usually ASCII, which always parses correctly as UTF-8, but you sometimes are trying to parse data that's actually encoded in ISO 8859-1 or Windows codepage 1252. Such data will generally be mostly ASCII, but with some bytes outside the 0–127 range ASCII defines. UTF-8 would expect such bytes to form a sequence of code units within a specified sequence of ranges, but in other encodings, any byte, regardless of value, is a complete character on its own. Trying to interpret non-ASCII non-UTF-8 data as UTF-8 will almost always get you either wrong results (wrong characters) or no results at all (cannot decode; decoder returns nil), because the data was never encoded in UTF-8 in the first place.

    You should try UTF-8 first, and if it fails, use ISO 8859-1. If you're letting the user retrieve any web page, you should let them change the encoding you use to decode the data, in case they discover that it was actually 8859-9 or codepage-1252 or some other 8-bit encoding.

    If you're downloading the data from a specific server, and especially if you have influence on what runs on that server, you should make it serve up an accurate Content-Type header and/or fix whatever bug is causing it to serve up text that isn't in UTF-8.

    Из того же SO. Так что скорей всего у Вас не UTF
    Ответ написан
    1 комментарий
  • Как заменить метод в категории Objective-c?

    Flanker_4
    @Flanker_4
    Я думаю тут поможет swizzling ,
    Вот подробней: stackoverflow.com/questions/5371601/how-do-i-imple...
    Единственное в чем не уверен, так это в категориях
    Ответ написан
    Комментировать
  • Какие есть best practice для проектов под iPhone?

    Flanker_4
    @Flanker_4
    1) Уже обсуждали эту тему. Считаю, что полный отказ от стори боарда - глупостью. Стори боард существенно упрощает жизнь при проектировании интерфейсов, особенно когда Вы поддерживаете весь спектр девайсов (ретина/не ретина, ios 6/7, ipad/iphone/iphone 4").
    К примеру, у вас есть кнопка, которая повторяется на куче экранов. Объявляете класс XXXButton, унаследованный от UIButton. В нем реализуете метод
    -(void) setupButton, где тем же кодом прописываете все нужные изменения (шрифт, цвет, бэкграунд)
    Далее переопределяете метод -(void)awakeFromNib или метод -(id)initWithCoder и вызываете в нем метод setupButton.
    В storyboarde добавляете обычную кнопку, но изменяете ей тип с UIButton на XXXButton. Аналогично для других элементов UI. Получаете эдакий кривоватый аналог css+html.
    Еще есть вариант выноса кнопки в отдельный xib и загрузки ее от туда. Но от этого может очень упасть производительность.
    Ну и да, иногда использование storyboardov действительно не оправдано...

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

    2)stackoverflow.com/questions/5210535/passing-data-b... . Посмотртите ближе к концу ответ, отмеченный как правильный. NotificationCenter не самое лучшее решение. Более того, отсылая нотификацию нельзя быть уверенным, что ее вообще кто-то получит. Да мало ли там что на том конце провода, а если получатель ViewController еще не создан на момент отсылки нотификации?

    3)
    - нормально ли, если связанные файлы как в java выделяются в отдельные каталоги. Или просто в x-code создавать виртуальные каталоги (refs), а реально все файлы складывать в одну папку.

    Мне кажется лучше первый вариант. Потому как с проектом можно взаимодействовать не только через xcode
    - именование классов контроллеров. ContactsEditorViewController vs ContactsEditor.

    Лучше указывать что это конкретно ViewController, и да, не забывайте о префиксах. А еще очень рекомендую заглянуть на developer.apple.com. Там есть несколько статей о соглашениях по именованию классов, методов и т.п. Некоторые фичи без "правильных" имен могут сломаться (kvo , arc)
    Да и всегда можно почитать рекомендации от того же гугла...

    4) Локализация
    Это разные инструменты для разных целей. NSLocalizedString используется когда вам нужно перевести текст интерфейса. Storyboard localize - когда Вам нужно переделать интерфейс. Что бы Вам было понятней, представьте, что делается приложение ориентированное только на западного пользователя. NSLocalizedString хватит с головой, была кнопка Home, стала Домой :).
    А вот если Вы захотите продавать приложение где-то на востоке, то тут окажется, что есть иероглифы, написание справа на лево/сверху вниз. Да и вообще, не умеют они думать квадратно гнездовым способом, им подавай абсолютно другой интерфейс.
    Ответ написан
    Комментировать
  • Почему пуш-уведомления перестают приходить на iOS устройства?

    Flanker_4
    @Flanker_4
    Есть дока с описанием возможных проблем с push notification. Что-то мне подсказывает, чторазделы Registration Succeeded But No Notifications Received и Some Notifications Received, but Not All могут Вам помочь.
    Ответ написан
    Комментировать
  • Проблема с PopoupViewController [видеовопрос]?

    Flanker_4
    @Flanker_4
    насчет второго, Вы всегда можете запретить GestureRecognizer'у реагировать на тапы в некоторых view'ушках. Примеры в документации или тут
    stackoverflow.com/questions/15814697/uitapgesturerecognizer-tap-on-self-view-but-ignore-subviews
    Насчет первого, скорей всего проблема в
    [self presentViewController:popupViewController animated:YES completion:nil];
    Насколько я помню, с анимацией через presentViewController возникают проблемы , если вы хотите оставить под низом старый viewController. stackoverflow.com/questions/7256652/why-does-presentmodalviewcontrolleranimated-turn-the-background-black/ . Идея такова (а особенно на iPhone), что должен присутствовать только один активный viewController на сцене.
    Конечно можно попробывать поиграть с modalTransitionStyle
    и прочими property, отвечающими за стиль анимации, но как показывает практика, в новых версиях ios это может сломаться. Можно сделать свою кастомную анимацию добавления поповера через
    [self.view addSubview:popupViewController.view]; и [UIView animationWithDuration]
    Но я бы рекомендовал посмотреть в сторону стандартных элементов управления, к примеру ActionSheet
    Ответ написан
  • Как повторно использовать View Controller в проекте с использованием storyboard?

    Flanker_4
    @Flanker_4
    У Вас не получится так сделать. Storyboard всегда грузит указанный в свойствах класс. И даже попытки поиграться с рантаймом не дают никакого эффекта: я пробовал переопределять initWithCoder и возвращать класс наследник. Приложение падает с пометкой, что ожидается другой класс на выходе. Т.е. после загрузки storyboard проверяет что бы все было чин чином...

    Что можно сделать, что бы решить Вашу проблему:
    - создавать вьюшку для viewController'a кодом (-loadView), т.е. отказаться от Storyboard. Субьективно, не самое лучшее решение.
    - В самом storyboard продублировать viewController, указав нужный класс для него. Самое быстрое решение, но Вам прийдется поддерживать по сути два одинаковых представления. Если позже нужно будет допиливать проект, то Вы очень обрадуетесь:)
    - использовать xib для таких дублирующихся viewController'ов. Насколько я помню initWithNib позволит корректно загрузить вьюшку в класс наследник. Неуверен в этом, правда...
    - сделать Add view controller контейнером, содержащим DetailController. Т.е. Загружать detailController из storyboard'a и добавлять его посредством addSubview в AddViewController. Или еще одно извращение из той же оперы , вытащить из этого загруженого DetailViewController'a саму вьюшку, установивть корректно outlets и actions и убить загруженный вью контроллер. У меня так получилось, но это все от лукавого.
    Ответ написан
  • Почему приложение Amazon Kindle под iOS7 постоянно перегружает экран после возвращения из другого приложения?

    Flanker_4
    @Flanker_4
    Как правило, "перезагрузка" экранов происходит при нехватке памяти. Когда Вы переходите в тот же Abby Lingvo он запрашивает слишком много памяти, система просит потесниться AmazonKindle и он выгружает себя (либо какую-то часть себя). iPad mini слабенький в этом плане

    Как вариант, попробуйте убить(всмысле выгрузить из памяти в панели где отображены все запущенные app) все лишние приложения , оставив только эти два. Ну или поставить другой словарь, который будет кушать меньше ресурсов. Возможно поможет... просто еще есть вариант, что так и было задумано разработчиками Amazon Kindle. Тогда этот совет мимо кассы

    До кучи, вот вам лайфхак
    http://ebookfriendly.com/translate-words-in-kindle-app/
    Ответ написан
    Комментировать
  • Передача данных View Controller - View, странное поведение?

    Flanker_4
    @Flanker_4
    Когда я пытаюсь вывести в консоль индекс в следующем методе

    Ну давайте поиграем в телепатов. Мой ход.
    Беглый взгляд на код PagedFlowView заставляет ужаснуться, так как перезагрузка этой кастомной таблицы происходит в layoutSubviews по некоему флагу _needsReload, который приватный (1), при инициализации приложения устанавливается в YES(2) и... больше никогда не сбрасывается(3). Таким образом, каждый раз, когда этому PagedFlowView посылается setNeedsLayout он перезагружает данные из дата соурса. А setNeedsLayout вызывается наверное часто....

    Насчет первого, а бог его знает. половину кода нет, тут даже угадать сложно
    Ну а это вообще что-то термоядерное
    - (void)drawRect:(CGRect)rect{
    [self initMehod];
    }
    Ответ написан
    2 комментария
  • Ошибка при запуске проекта в xCode 5 после подключения MessageUI?

    Flanker_4
    @Flanker_4
    Вы не поверите!
    Банальное переименовывание ViewController'a с MPViewController в, к примеру, BBViewController (контекстное меню на объявлении класса, Refactoring, Rename)
    решает проблему. Почему? не знаю?
    Доброжо пожаловать в суровый мир objective-c
    Ответ написан
  • Как заменить кнопки в ios RemoteControl?

    Flanker_4
    @Flanker_4
    Если мне не изменяет память, то никак (конечно если речь идет о приложении, размещаемом в AppStor)
    Но вот так сразу подтверждения в документации не смог найти.
    Ответ написан
    3 комментария
  • Проблема с кастомным TabBarController в ios7 [видеовопрос]?

    Flanker_4
    @Flanker_4
    А можно посмотреть исходники этого проекта?
    У Вас после перехода на след. экран высота frame'а таблицы увеличивается на высоту tapBar'a. Такое чувство что при обратной анимации эта высота не сбрасывается, и так и остается большей на высоту tapBar'a.
    Таблица, это же _contentView?
    если так, то посмотрите чему равно
    _isTabBarHidding
    при выполнении обратной анимации в строке
    .size.height = CGRectGetHeight(self.bounds) — ((!_isTabBarHidding)? CGRectGetHeight(_tabBar.bounds): 0)
    есть предположение, что _isTabBarHidding == YES (хотя должно быть NO).
    Если так, то скорей всего layoutSubview вызывается раньше, чем Вы обновляете _isTabBarHidding, и Вам нужно принудительно послать базовой вьюхе setNeedsLayout, после установки _isTabBarHidding == NO
    Но повторюсь, без исходников
    Ответ написан
  • Как YouTube сделал автовоспроизведение видео в iPad и iPhone?

    Flanker_4
    @Flanker_4
    А посмотрите на js вот с этого сайта
    ссылка на первый попавшийся фильм
    У меня на втором паде с iOS 6.1 автоматически воспроизводится видео(кстати оооочень раздражает)
    Ответ написан
    Комментировать
  • Как правильно работать c временными данными в CoreData?

    Flanker_4
    @Flanker_4
    А зачем Вы временные объекты заносите в хранилище.
    Почему бы не держать их просто в памяти, а после выбора пользователем вносить только выбранный?
    Ответ написан
  • Возможно ли на симуляторе смоделировать процесс обновления приложения?

    Flanker_4
    @Flanker_4
    Попробуйте:
    -собрать «старую» версию приложения
    -поработать с приложением/сформировать пользовательские данные. Ну или выгрузить эту папку через органайзер с девайса.
    -не удаляя, собрать через xcode новую версию приложения

    Приложения, установленные на симе, находятся в папке Application Support (там же вы можете посмотреть/изменить пользовательские данные)
    Ответ написан
    Комментировать