1

我目前正在开发我的第一个主要 RubyMotion 应用程序。我有很多 html 文本要显示,并且想摆脱使用 UIWebView ——因为它有点像 hack,而且如果没有很多箍,很难正确调整大小。所以,我的选择之一是 DTCoreText,它似乎是这批最常用和最稳定的控制。

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

相反,我选择了供应商选项。我 git 将 DTCoreText 存储库克隆到我的供应商目录中,并将其添加到我的项目中。虽然它通过编译库并制作我的 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 构建过程还不太了解,所以我可能遗漏了一些东西。但它似乎应该工作。它对我说它可以正确地看到标题(并且可以编译),但它不知道实际的库在哪里。

4

1 回答 1

0

好吧,我在 DTCoreText 方面有相关经验,但在 RubyMotion 方面没有经验。DTCoreText 使用类别,因此具有特殊的负载要求。在我的 Xcode 项目中,在“其他链接器标志”中,我有这个:-force_load $(BUILT_PRODUCTS_DIR)/libDTCoreText.a

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

一年来我一直很高兴使用 DTCoreText,恕我直言,它是比使用 UIWebViews 更好的属性文本解决方案。

于 2012-07-31T20:22:15.753 回答