2013-02-28 1 views
4

Я добавил дополнительный метод в класс String. Я хочу использовать этот метод позже, но у меня нет ошибки метода.Rubymotion: NoMethodError для добавления метода

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

Когда я попробовать следующее в РЕПЛ он работает:

(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" 

ответ

4

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

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