2013-05-26 1 views
0

Я некоторый код, который я портирования к RubyMotion из MacRuby, и я получаю ошибку TCPServer Имя: Вот сообщение об ошибке:TCPServer Класс NameError в RubyMotion (OSX)

app_delegate.rb:29:in `control_server:': uninitialized constant AppDelegate::TCPServer (NameError) 

Это линия кода, который вызывает проблему:

dts = TCPServer.new(ip, port) 

Я читал, что некоторые классы от Ruby, не включены в RubyMotion, но я не уверен, какие классы и как определить, какие классы не доступны.

Благодаря

ответ

1

RubyMotion не включает всю стандартную библиотеку Ruby, потому что RubyMotion не приходит со встроенным в способе борьбы с определенными частями языка Ruby, которые требуются большим количеством стандартной библиотеки и общинные драгоценные камни - такие как require, eval, load и так далее.

Традиционно мы использовали это, используя библиотеки Objective-C, так как RubyMotion соединяет классы Objective-C без проблем. Там есть множество существующих библиотек Objective-C и потрясающая система управления зависимостями в CocoaPods. Если вы хотите немного переписать, библиотека CocoaAsyncSocket должна соответствовать вашим потребностям.

Если вы чувствуете себя немного более предприимчивым, вы можете попробовать получить действующий код, используя MotionBundler. Он пытается добавить поддержку require RubyMotion с различными уровнями успеха. Теоретически, вы просто вернете эту строку require 'socket' в свой код после того, как вы настроили MotionBundler, и он должен позаботиться обо всем остальном. У меня были довольно страшные следы стека, когда я сам это пробовал, так что это, вероятно, не серебряная пуля. TCPServer особенно беспокоит, так как я уверен, что он использует собственные расширения C, которые не поддерживаются MotionBundler.

+0

Спасибо Aethe. Я попробую спутник движения, но, вероятно, начну смотреть на сокеты Cocoa. – tsugua

+1

Я попробовал motionbundler, и мне не понравилась библиотека сокетов, как вы подозревали. – tsugua

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

  • Нет связанных вопросов^_^