【问题标题】:Using DTCoreText with RubyMotion将 DTCoreText 与 RubyMotion 一起使用
【发布时间】:2012-07-31 20:15:21
【问题描述】:

我目前正在开发我的第一个主要 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 构建过程还不是很了解,所以我可能遗漏了一些东西。但它似乎应该工作。它对我说它可以正确地看到标题(并且可以编译),但它不知道实际的库在哪里。

【问题讨论】:

    标签: ios rubymotion


    【解决方案1】:

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

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

    我已经非常高兴使用 DTCoreText 一年了,恕我直言,它是一个比使用 UIWebViews 更好的属性文本解决方案。

    【讨论】:

    • 谢谢。看起来构建过程已经在 libDTCoreText.a 上执行 force_load。更糟糕的是定义肯定在那个文件中。这就像它没有被应用或什么的。太奇怪了。
    • 哈——有人因为我帮助你而投了反对票——这太奇怪了!无论如何,您可以访问 RubyMotion 帮助站点吗?您也可以在 DTCoreText 论坛上发帖,看看那里是否有人回复。当你的应用程序被构建时,你真的能看到最终的负载线吗?另一个想法是只设置一个字符串属性,尝试让它工作(看看你是否会遇到同样的崩溃)。
    • 最后一件事 - 在 force_load 上 - 在 Xcode 3 中它必须是一个完全合格的路径 - 从“/”开始。在 Xcode 4 中你可以使用 $(variable) 所以它可能是一样的。因此,如果您能找到负载线,请确保 force_load 完全合格。如果你做错了,链接器不会抱怨——它会默默地失败。
    • 是的,那不是很好。它肯定链接了完整的文件名,但似乎它实际上并没有使用它。我想我会把它归结为一个 RubyMotion 错误,然后就这样了。
    • Ted,在你认输之前,问题可能是你的使用问题,而不是加载问题。第一,实例化source的时候能不能马上设置frame。二、设置属性字符串为[NSAttributedString initWithString:@"Hello World"];看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    相关资源
    最近更新 更多