Хобрук: Ваш путь к мастерству в программировании

Управление памятью в нескольких представлениях

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

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

Например,

Я перейду к представлению конфигурации, внесу некоторые изменения в настройки и вернусь к основному виду карты. Как только я снова вернусь к представлению конфигурации, значения вернутся к значениям по умолчанию. Рассматриваемое значение — distanceFilterValue.

Вот реализация моего контроллера представления конфигурации:

@interface SimpleConfigViewController()
//private interface inside implementation
@property (weak, nonatomic) UISlider * distanceFilterSlider;
@property (strong, nonatomic) NSNumber *distanceFilterValue;
@end

@implementation SimpleConfigViewController

@synthesize distanceFilterLabel = _distanceFilterLabel;
@synthesize distanceFilterSlider = _distanceFilterSlider;
@synthesize distanceFilterValue = _distanceFilterValue;

- (NSNumber *)distanceFilterValue {
    if (!_distanceFilterValue) {
        _distanceFilterValue = [NSNumber numberWithFloat:250.0];
    }
    return _distanceFilterValue;
}

- (IBAction)distanceSliderValueChanged:(UISlider *)sender {
    self.distanceFilterValue = [NSNumber numberWithFloat:sender.value];
    //update GUI
    self.distanceFilterLabel.text = [NSString stringWithFormat:@"%.f m", sender.value];
}


@end

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

Заранее спасибо за помощь.


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

Ответы:


1

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

В любом случае вы должны хранить свои значения в объекте модели, а не в контроллере!

07.02.2012
  • Я поместил в журнал сообщения, чтобы проверить это, и обнаружил, что при первой загрузке представления конфигурации вызывается viewDidLoad. Но при возврате в представление карты viedDidUnload не вызывается. 07.02.2012
  • Я понимаю, что должен поместить DistanceFilterValue в объект модели, но не дает ли сильный указатель на объект NSNumber того же эффекта? Моя модель была бы просто классом-оболочкой, для которого я бы сохранил надежный указатель. (Это мой ход мыслей, я вполне могу ошибаться в этом предположении) 07.02.2012

  • 2

    Я думаю, что Эрик прав, каждый раз, когда вы вызываете viewDidLoad для своего configView, он сбрасывается. Вы можете использовать Singleton или NSUserDefaults, чтобы решить эту проблему.

    07.02.2012
  • Я думаю, что я не понимаю, в какой момент (и почему) мой сильный указатель на DistanceFilterValue освобождается? 07.02.2012
  • Что находится в viewDidLoad в вашем configView? 07.02.2012
  • Просто стандартный [super viewDidLoad]; 08.02.2012
  • Новые материалы

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..