2014-03-07 4 views
2

Это как мое приложение выглядит в настоящее время:Использует performSelector: afterDelay: самый эффективный способ очереди или порядка?

enter image description here

После того как я выполнить обновление базы данных в моем контроллере подробно в ракурсе номере 7 на изображении выше, как только кнопка сохранения нажата деталь сохраняются базы данных. Я вернусь к tableView номер 5 и ожидаю, что соответствующая строка покажет последние обновления, вызвав специальный метод из рамки parse.com, который перезагружает объекты и обновляет представление таблицы, например. [self loadObjects].

Я использую разматывающий сегмент. В представлении 7 я делаю связь между кнопкой сохранения и символом выхода его окна контроллера в построителе интерфейса, а затем в tableView number 5 У меня есть метод segue, который соответствует этому подключению.

разматывает метод Segue:

-(IBAction)saveDetailsButtonTapped:(UIStoryboardSegue *)segue { 
    // alert goes here 
    [self performSelector:@selector(didTapRefreshButton:) withObject:self afterDelay:1.0]; 
} 

Этот метод очищает таблицу и загружает первую страницу объектов:

- (IBAction)didTapRefreshButton:(id)sender { 
    [self loadObjects]; 
} 

Когда сохранить щелкнули вид № 7 Детали сохраненный в db, и пользователь выкупается до вида таблицы 5, тогда метод выше работает после задержки 1.0. Я думал, что все в порядке, но не слишком хорошо. Я попробовал это на своем телефоне, и иногда задержка была недостаточной, что означало неудачное обновление.

Затем я решил попробовать использовать метод делегата UIAlertView, чтобы определить, когда была нажата кнопка ok из предупреждения, и он работал нормально в большинстве случаев, но затем время, когда я нажимал кнопку «ОК», чтобы быстро отключить оповещение по возвращении на просмотр и данные не были перезагружены.

Есть ли лучший надежный надежный способ обновления моих данных?

Мне нужно знать, что обновление базы данных было успешным и только затем запустить метод [self loadObjects] и, возможно, сделать это автоматически.

У меня есть два метода, которые обнаруживают, когда объекты будут загружаться (например, когда кнопка была нажата) и когда они загружены. Я добавил код spinner, чтобы показать spinner, когда происходит загрузка, и уберите его, как только это будет сделано.

Не существует ли способ способов очереди, как некоторые, как в одном способе сделать так, чтобы одно не произошло, пока не произошло другое?

Если это так, я действительно ценю некоторые идеи и примеры, поскольку я мог бы просто отметить приложение как полное, но даже если мне не платят, и это благотворительная работа, у меня все еще есть желание сделать все возможное.

Спасибо за ваше время.

Сердечные приветы

ответ

2

Я поставил некоторые спиннера код там, чтобы показать блесну при загрузке происходит и отнять ее, как только это сделано.

Вы должны сделать что-то подобное здесь.

Мне нужно знать, что обновление базы данных прошло успешно и только затем запустить метод [self loadObjects] и, возможно, сделать это автоматически.

Поскольку вы сохраняете для синтаксического анализа, это должен быть синтаксический анализ SDK, который сообщает вам, когда сохранение будет завершено. Если вы сохраняете фон (который должен быть), используйте метод сохранения, когда вы предоставляете блок обратного вызова, который вызывается при завершении сохранения. Этот блок называется вашим триггером для удаления счетчика и segue.

Примечание стороны: -

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

+0

Это хорошо объясняет мне. Я проделал небольшую поисковую работу после прочтения и наткнулся на это: https://parse.com/questions/customize-something-went-wrong-error Я собираюсь опробовать его и отчитаться, но он выглядит точно так же, как что я хочу. Я могу сохранить в фоновом режиме с помощью блока. Прямо сейчас я просто сохраняю в фоновом режиме. – LondonGuy

+0

Работал отлично. Ответ был сохранен в фоновом режиме блоком. Все, что мне нужно было сделать, это обновить мой код и добавить некоторые операторы if внутри блоков. – LondonGuy

Смежные вопросы