2013-11-30 2 views
0

Чтобы отделить действия от делегата приложения, я переместил их в модули соответствующих контроллеров и включил модули в AppDelegate.Динамически определяющие методы, называемые Objective-C с RubyMotion

Однако сначала я попытался определить действия для каждого контроллера в хеше и использовать define_method для динамического создания методов. Это дало мне ошибку method '<action>:' created by attr_reader/writer or define_method cannot be called from Objective-C. Please manually define the method instead (using the 'def' keyword).

По сравнению с define_method, включая модули, не очень эффективные с RubyMotion. Для этой ситуации производительность не так важна, но есть ли другой способ создания методов «на лету», которые можно вызвать из Objective-C?

+0

Можете ли вы разместить пример кода? – FluffyJack

+2

Вы можете попробовать использовать хэш с лямбдами и вызвать эти лямбды. – kixorz

ответ

2

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

Когда дело доходит до RM, вам придется работать, не имея возможности делать такие вещи.

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

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

Будет доступно множество альтернативных решений.

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