Ответы пользователя по тегу Objective-C
  • Перспективы iOS-разработчика?

    @agee
    Если Вам скучно в Вашей конкретной конторе, это не значит, что это .NET сам по себе скучный. Вы с таким же успехом можете найти скучную работу в любой технологии. ИМХО, надо расти просто профессионально, тогда авось и интересные проекты нарисуются сами.
    Ответ написан
    1 комментарий
  • Как обновить View при получении нотификации от NSNotificationCenter?

    @agee
    Доктор, Вы уверены, что обращаетесь к UI из главного, а не из второстепенного потока? Если нет - исправьте, и посмотрите, решило ли Вашу проблему.
    Ответ написан
    2 комментария
  • Куда поместить код загрузки и парсинга JSON в iOS приложении?

    @agee
    Когда Вы возвращаетесь в главный поток после того, как пришел ответ от сервера, сохраните результаты в Ваш plist и после этого пошлите notification об этом событии. NSNotificationCenter и NSNotification в помощь.
    На эту нотификацию могут быть подписаны любые объекты. Так что если сейчас активен viewController, который отображает погоду в конкретном городе, после получения нотификации смело обновляйте данные.

    Что касается "куда положить код работы с сервисом погоды". Учитывая, что Ваше приложение по описанию миниатюрное, можете смело этот код "пихать" в viewDidLoad root viewController'а. В противном случае, если хочется обращатья к серверу из разных мест, можно создать отдельный синглтон с простеньким интерфейсом в один метод а-ля
    - (void)temperatureListWithCompletion:(void(^)(NSError * error, NSArray *results));
    И вызывать его уже откуда душа пожелает. Не стоит, правда, забывать о том, что нет смысла посылать новый запрос, пока не пришел ответ на предыдущий точно такой же.
    Ответ написан
    1 комментарий
  • Как вернуть один элемент массива objective-c ?

    @agee
    Когда Вас "отправляет в main()" - это явный признак того, что ошибка есть. И выводится она в XCode внизу в панели вывода логов. Там же будет выведен стек вызовов. Пройдитесь трассировщиком и выясните, на какой строке вылетело исключение.
    Если ошибка в строке token = [data objectAtIndex:1], убедитесь, что:
    - JSONObjectWithData возвращает именно объект массива, а не, допустим, словаря (потенциально выскачит ошибка NSInvalidArgumentException при вызове doesNotRecognizeSelector);
    - в возвращаемом массиве, если это массив, больше 1-го элемента (может выскочит NSRangeException, если Вы берете 2-ой элемент, а там, допустим, он всего один).
    Ответ написан
    1 комментарий
  • Как получить доступ к переменной из другого класса?

    @agee
    В коде viewcontroller'а напишите
    - (void)viewDidLoad {
        [super viewDidLoad];    
        ImageTouched *instance = [[ImageTouched alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
        [self.view addSubview:instance];
        // Подписываемся на уведомление
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageDidTouch:) name:@"ImageTouchedImageDidTouch" object:nil];
    }


    Добавьте к коду вью-контроллера метод
    // Метод, который обрабатывает уведомление
    - (void)imageDidTouch:(NSNotification *)notification {
        if ([notification.object isKindOfClass:[ImageTouched Class]])
            NSLog(@"Pew value is %@", ((ImageTouched *)notification.object).pew);
    }


    А уже в touchesBegan вызовите это уведомление
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        NSLog(@"Image Touched");
        self.pew = @"pewpewpewew";  
        // Отправить уведомление, отправляя самого себя в качестве параметра object
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ImageTouchedImageDidTouch" object:self];
    }


    Для чтения:
    О свойствах https://developer.apple.com/library/ios/documentat...
    Об уведомлениях: https://developer.apple.com/library/mac/documentat...
    Ответ написан
  • Проблема с переопределением touchesEnded для подкласса UICollectionViewCell?

    @agee Автор вопроса
    Проблема решена.
    Я переписал touchesEnded следующим образом:
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        [super touchesEnded:touches withEvent:event];
        if (_editingMode) {
            // Do my thing
        }
    }

    А игнорирование дефолтного поведения в режиме editingMode я уже реализовал в didSelectItemAtIndexPath:
    GDCollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
        if (cell.editingMode)
            return; // Do nothing in editing mode

    Пожалуй, так нужно было сделать с самого начала.
    Ответ написан
    Комментировать
  • Простой таймер на Objective C

    @agee
    Ваша проблема напрямую связана с Вашим первым тезисом.
    Вы либо вызываете sleepForTimeInterval в главном потоке, чем полностью вешаете юзер-интерфейс, либо наоборот, изменяете свойство text UI-объекта из второстепенного потока, что приводит к непредсказуемым результатам.
    Попробуйте использовать второстепенный поток для цикла со sleep'ом, и оттуда меняйте свойство вызовом performSelectorOnMainThread.
    И вообще, погуглите на тему потоков, это просто необходимо понимать.
    Ответ написан
    Комментировать