Rubymotion: NoMethodError для добавленного метода

Я добавил дополнительный метод в класс String. Я хочу использовать этот метод позже, но получаю сообщение об ошибке «Нет метода».

class String
   def as_file_full_path
      NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true)   [0].stringByAppendingPathComponent(self)    
  end
end

Когда я пробую следующее в REPL, это работает:

 (main)> "image.jpg".as_full_path
  => "/Users/user/Library/Application Support/iPhone Simulator/6.1/Applications/30D186A9-B1C7-4377-AE91-0D14BD3B4A6D/Documents/image.jpg"

Но когда я вызываю метод в классе моей модели, он больше не работает:

 (main)> w = Word.first
  => #<Word:0x94d7df0>
 (main)> w.filename
  => "2C86A58A-A92A-4A0F-B26C-0F5F583E142C.caf"
 (main)> w.filename.class
  => String
 (main)> w.filename.as_full_path
 2013-02-28 09:17:55.935 project[74283:c07] undefined method `as_full_path' for "2C86A58A-A92A-4A0F-B26C-0F5F583E142C.caf":String (NoMethodError)
 => NoMethodError: undefined method `as_full_path' for "2C86A58A-A92A-4A0F-B26C-0F5F583E142C.caf":String

Модель реализована с помощью NanoStore::Model.

Редактировать:

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

w.filename.dup.as_full_path
=> "/Users/user/Library/Application Support/iPhone Simulator/6.1/Applications/30D186A9-B1C7-4377-AE91-0D14BD3B4A6D/Documents/2C86A58A-A92A-4A0F-B26C-0F5F583E142C.caf"

person Raymond    schedule 28.02.2013    source источник


Ответы (1)


Задача решена! По какой-то причине расширение класса String не всегда работает. Я думаю, что NanoStore по какой-то причине не возвращает «настоящие» рубиновые строки. Решил это, заменив «String» на «NSString», поэтому:

class NSString 
   def as_file_full_path
       NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true)   [0].stringByAppendingPathComponent(self)    
   end
end
person Raymond    schedule 28.02.2013