Кнопка остановки какао - PullRequest
       1

Кнопка остановки какао

0 голосов
/ 23 декабря 2010

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

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

Ответы [ 3 ]

1 голос
/ 23 декабря 2010

Ваша процедура загрузки должна использовать какой-то цикл.Создайте логическое значение и в своем цикле проверьте состояние логического выражения.Затем в селекторе кнопок установите селектор для изменения состояния логического значения.Как только ваш цикл возобновится, он выйдет и прекратит загрузку данных.

0 голосов
/ 23 декабря 2010

Спасибо, я обычно использую потоки, но в этом случае, чтобы использовать поток, я должен почти переписать свое приложение ... Так что я нашел быстрое решение. В цикле я добавил:

while (событие = [NSApp nextEventMatchingMask: NSAnyEventMask tillDate: [NSDate distantPast] inMode: NSDefaultRunLoopMode dequeue: YES]) [NSApp sendEvent: событие]; } Поэтому, когда пользователь нажимает кнопку, чтобы остановить цикл, я публикую уведомление и выхожу из цикла. Хорошо работает.

0 голосов
/ 23 декабря 2010

Первое правило хороших приложений для Mac:

Не блокировать основной поток

Некоторые опции:

  • Выполните работу в фоновом потоке. Похоже, вы не хотите / не можете в этом случае
  • Используйте что-то вроде NSURLConnection для обработки данных небольшими порциями в главном потоке по мере их чтения, вместо выполнения непрерывного цикла
  • Периодически запускайте цикл обработки событий при загрузке данных, чтобы можно было обрабатывать события пользовательского интерфейса
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...