Проверка изменений данных в приложении - PullRequest
0 голосов
/ 13 сентября 2011

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

Есть ли способ получить это Изменено Поведение приложения в ширину? или мне нужно создать действие для каждого элемента управления и установить там код?

Я использую Xcode 4, если это имеет какое-либо значение.

Спасибо за помощь.

1 Ответ

2 голосов
/ 13 сентября 2011

Вам все равно нужно написать код для каждого элемента управления (для обработки пользовательских изменений).

Возможно, вам потребуется написать дополнительный код для каждого изменяемого свойства, в зависимости от того, как настроено ваше приложение.

Я бы предложил использовать NSNotificationCenter и отправлять уведомление «что-то изменилось» при изменении одного из ваших свойств данных.

При касании вашего элемента управления вы устанавливаете свойство для некоторого объекта хранения данных:

-(IBAction)grommetSwitchPress:(UISwitch*)sender
{
    self.userData.wantsGrommets = sender.on;
}

Этот класс хранения данных будет определять свойство:

@interface UserData : NSObject
{
}
@property (nonatomic, assign) BOOL wantsGrommets;

с пользовательским установщиком свойств, который проверяет, изменилось ли значение:

-(void)setWantsGrommets:(BOOL)wantsThem
{
    if (wantsGrommets != wantsThem) // compares current property value with incoming
    {
        wantsGrommets = wantsThem;
        [[NSNotificationCenter defaultCenter]
                     postNotificationName:NOTIFY_SOMETHING_CHANGED
                   object:self];
    }
}

В каком-то заголовке вы определите уведомление:

#define NOTIFY_SOMETHING_CHANGED        @"somethingChanged"

и вам решать, куда поместить код в вашем приложении, который прослушивает NOTIFY_SOMETHING_CHANGED, например:

- (void)viewDidLoad:(BOOL)animated
{   
    [[NSNotificationCenter defaultCenter] addObserver:self
               selector:@selector(somethingChanged:)
           name:NOTIFY_SOMETHING_CHANGED
             object:nil];   
}

В методеthingChanged: вы можете, например, сохранять данные в NSUserDefaults.

Я бы не советовал "просить пользователя сохранить информацию, когда что-то меняется на каком-либо (или всех) элементах управления". Трудно спросить пользователя, хотят ли они сохранить свои изменения… конечно, они хотят. Если вы хотите дать им возможность отступить, вместо этого предоставьте кнопку «Возврат» или «Сброс».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...