2012-02-07 2 views
0

Моя цель заключается в следующем: я хочу создать метод отложенного вызова. Мне может понадобиться создать блок для этого, но я не уверен. Можете ли вы объяснить мне, как создать блок для этого?Использование метода отложенного выполнения в Objective-C

Это код:

- (IBAction)buyItem:(id)sender { 
    BOOL purchase = ... /*call purchase method use block*/ 
} 

В этом методе я делаю покупки и после покупки успешно завершена, я хочу, чтобы получить результат в моей переменной purchase.

Чтобы быть более ясным:

Шаг 1: Вызовите метод buyItem.

Шаг 2: Подождите ответа на покупку (я опустил фактические методы для покупки)

Шаг 3: После того, как объект StoreKit возвращает ответ о покупке, записать значение в переменную purchase.

Шаг 4: После записи значения в purchase мой метод buyItem завершает выполнение (перейдите к } и отпустите).

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

Спасибо всем!

ответ

1

Вам нужен блок, но, возможно, другой вид, чем вы думаете. Вам не нужно «закрытие», вам нужна функция, которая будет блокироваться, пока не получит ответ из комплекта/сервера магазина.

Вы можете просто написать обычный метод buyItem, но внутри вы либо совершаете синхронный вызов для хранения набора, либо если это невозможно, вы используете методы потоковой передачи, чтобы достичь того, чего хотите. Например, вы можете ждать переменную условия, а затем сигнализировать об этом, когда вызов набора магазина возвращается.

Для обоих случаев вы хотите выполнить вызов buyItem в потоке, отличном от потока пользовательского интерфейса, иначе ваш пользовательский интерфейс замерзнет. Учитывая это ограничение (если вы даже имеете дело с пользовательским интерфейсом), я бы сказал, что весь этот подход не имеет смысла. Вместо этого вы хотите запустить вызов набора магазина, установить в вашем пользовательском интерфейсе какой-либо индикатор или счетчик или что-то еще, а затем, когда вызов набора магазина вернется, отключите счетчик или что-то еще. Имеют смысл?

+0

Hello Colin! Да, это отличная идея! Спасибо за хороший и полный ответ! –

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