在RubyMotion中使用DTCoreText

时间:2012-07-31 20:15:22

标签: ios rubymotion

我目前正在开发我的第一个主要RubyMotion应用程序。我有很多html文本要显示,并且想要远离使用UIWebView - 因为它有点像黑客而且很难在没有很多箍的情况下正确调整大小。所以,我的一个选择是DTCoreText,它似乎是这个地段最常用和最稳定的控制。

我最初尝试使用CocoaPod版本,但由于某种原因,它导致来自另一个pod的MKNetworkKit问题。我搞砸了一下,但是看到MKNetworkKit中有很多关于构建过程的报道问题,所以我最好不要管它。

相反,我选择了供应商选项。我git将DTCoreText repo克隆到我的供应商目录中并将其添加到我的项目中。虽然通过编译库和制作我的libDTCoreText.a文件让我更接近,但在实际运行之后我仍然处于困境。

我的Rake文件包括这个(其余的非常通用):

app.vendor_project('vendor/DTCoreText',
    :xcode,
    :target => 'Static Library',
    :products => ['libDTCoreText.a'])
app.libs << '/usr/lib/libxml2.2.dylib' #For DTCoreText

就像我说的那样,libDTCoreText.a文件被编译并复制到我项目中的正确位置。

我的应用在代码中有这个。这是尽可能基本的 - 我只是想看到它的工作。

@source = DTAttributedTextView.alloc.initWithFrame(CGRectZero)
@source.attributedString = NSAttributedString.alloc.initWithHTMLData(post.source.dataUsingEncoding(NSString.defaultCStringEncoding), options:{}, documentAttributes:nil)
@source.frame = [[self.frame.size.width / 2 - size.width / 2, 600], [250, 250]]

应用程序编译很好,但在运行时,当我们点击上面的代码时,它会崩溃:

Objective-C stub for message `initWithHTMLData:options:documentAttributes:' 
type `@@:@@^@' not precompiled. Make sure you properly link with the framework 
or library that defines this message.

*** simulator session ended with error: Error Domain=DTiPhoneSimulatorErrorDomain
Code=1 "The simulated application quit." UserInfo=0x10019d470
{NSLocalizedDescription=The simulated application quit., DTiPhoneSimulatorUnderlyingErrorCodeKey=-1}

有没有人有任何我可以开始寻找的想法?我对XCode构建过程还不太了解,所以我可能会遗漏一些东西。但它似乎应该工作。它告诉我它可以正确地看到标题(并且可以编译),但它不知道实际库的位置。

1 个答案:

答案 0 :(得分:0)

嗯,我对DTCoreText有相关经验,但没有RubyMotion的相关经验。 DTCoreText使用类别,因此具有特殊的负载要求。在我的Xcode项目中,在“Other Linker Flags”中,我有:-force_load $(BUILT_PRODUCTS_DIR)/libDTCoreText.a

该行确保库已正确加载。如果你不这样做,当你尝试使用它时会崩溃。

我一直非常高兴使用DTCoreText一年,而IMHO是一个比使用UIWebViews更好的归属文本解决方案。