RubyMotion(OSX)中的TCPServer类NameError

时间:2013-05-26 22:20:56

标签: macos rubymotion

我有一些代码,我从MacRuby移植到RubyMotion,我收到一个TCPServer Name错误:这是错误信息:

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

这是导致问题的代码行:

dts = TCPServer.new(ip, port)

我已经读过Ruby中的某些类没有包含在RubyMotion中,但是我不确定哪些类以及如何确定哪些类不可用。

由于

1 个答案:

答案 0 :(得分:1)

RubyMotion不包含整个Ruby标准库,因为RubyMotion没有内置的方法来处理许多标准库和社区宝石所需的Ruby语言的某些部分 - 例如{ {1}},requireeval等等。

传统上,我们通过使用 Objective-C 库来处理这个问题,因为RubyMotion无缝地桥接了Objective-C类。这里有大量现有的Objective-C库,以及CocoaPods中一个神话般的依赖管理系统。如果您需要稍作重写,CocoaAsyncSocket库应该符合您的需求。

如果您感觉更冒险,可以尝试使用MotionBundler让现有代码正常工作。它试图为RubyMotion添加load支持,并取得不同程度的成功。从理论上讲,在设置MotionBundler之后,您只需在代码中放回require行,它应该处理其余部分。当我自己尝试时,我得到了一些非常可怕的堆栈痕迹,所以它可能不是一颗银弹。 require 'socket'特别令人担忧,因为我很确定它使用的是NativeBundler不支持的原生C扩展。