Как узнать, есть ли у основного управляемого объекта данных динамический метод для установки отношения toMany?

У меня есть приложение iOS, которое использует основные данные. Я создал управляемый объект, который имеет отношение toMany к другому объекту. Приложение написано на RubyMotion.

При установке отношения "toMany" объекта "группа" NSManagedObject к объекту человека я вызываю:

group.addPersonObject( person )

но я хочу убедиться, что «addPersonObject» существует, прежде чем я его вызову. Я попытался

if group.respondsToSelector( "addPersonObject" ) 

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

Каков хороший способ узнать, существует ли он, прежде чем я его назову?

Из других вопросов о stackoverflow кажется, что responsesToSelect должен работать, поскольку я работаю с экземпляром класса, но, похоже, это не так.


person David Smith    schedule 08.11.2012    source источник


Ответы (2)


Пытаться:

if group.respond_to?("addPersonObject:")

Это должно работать. : требуется, потому что addPersonObject ожидает аргумент.

person Jamon Holmgren    schedule 08.11.2012
comment
Спасибо. Я проверил это отношение toOne с моей моделью Submitter. Он вернул true, но когда я попытался вызвать метод addSubmitterObject, он выдал мне сообщение об ошибке, отправленное неизвестным селектором. Метод setValue позволяет установить отношение toOne. - person David Smith; 16.11.2012
comment
Вы попробовали решение, которое я предложил, и оно вернуло истину, но все равно сломалось, когда вы его вызвали? Это похоже на ошибку RubyMotion. - person Jamon Holmgren; 17.11.2012

В итоге я использовал код, который определяет отношение для моей модели, чтобы найти, было ли это отношение toMany. Код специфичен для моих структур данных, но он выглядит так:

   # is this a toMany relationship on this class?
   def toMany?(relationship)

      result = false
      relationship = relationship.to_s # in case it was a symbol
      entities = Kernel.const_get( self.class.name ).entityDescription
      entities.each do |e|
        if e.class == NSRelationshipDescription and e.name == relationship and e.maxCount == -1
          result = true 
        end
      end
      result
    end
person David Smith    schedule 16.11.2012