【问题标题】:trouble linking to yaml framework无法链接到 yaml 框架
【发布时间】:2013-03-23 05:52:53
【问题描述】:

我正在制作一款 iPhone 游戏,并希望将 YAML 用于数据文件。感谢this question,我继续前进并得到了syck library。我设法用 xCode 编译库并将框架导入我的项目 [1]。我的代码成功导入了头文件,xCode 甚至找到了补全,但是当我尝试运行以下代码时,我得到一个无效的选择器异常:

NSMutableArray *arr = [[NSMutableArray arrayWithCapacity:4] retain];

[arr addObject:@"FOO BAR BAZ QUUX"];
[arr addObject:@"FOO BAR BAZ QUUX"];
[arr addObject:@"FOO BAR BAZ QUUX"];
[arr addObject:@"FOO BAR BAZ QUUX"];

NSLog([arr yamlDescriptionWithIndent:0]);
[arr release];

这是我得到的错误:

2013-04-01 23:27:50.530 PhaseWrath[13910:207] -[__NSArrayM yamlDescriptionWithIndent:]: unrecognized selector sent to instance 0x5548a30
2013-04-01 23:27:50.533 PhaseWrath[13910:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM yamlDescriptionWithIndent:]: unrecognized selector sent to instance 0x5548a30'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x0145f5a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x015b3313 objc_exception_throw + 44
    2   CoreFoundation                      0x014610bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x013d0966 ___forwarding___ + 966
    4   CoreFoundation                      0x013d0522 _CF_forwarding_prep_0 + 50
    5   PhaseWrath                          0x00005e85 +[Skeleton initialize] + 517
    6   libobjc.A.dylib                     0x015b3d9b _class_initialize + 380
    7   libobjc.A.dylib                     0x015bb73f prepareForMethodLookup + 73
...

似乎头文件被解析了,但是在实际链接库代码的地方出了点问题……有什么想法吗?我对 xCode 还是很陌生,而且一般都是为 iPhone 开发的。

[1] 如果我做错了什么,可能是在这一步。

【问题讨论】:

  • 您在 Xcode 中看到的确切错误是什么?
  • @StuartM:更新了问题
  • 您的Other Linker Flags 构建设置在 Xcode 中的含义是什么?请参阅下面我的回答,了解一个可能的问题。

标签: iphone ios xcode frameworks yaml


【解决方案1】:

您是否在构建设置中传递了-ObjC-all_load 链接器标志?在链接到包含 Objective-C 类别的库时需要这些(这是 Syck 用来向 NSArray 和其他内置类添加方法的方法)。有关详细信息,请参阅这些:

【讨论】:

  • 今晚我回家看看。这似乎很有希望。我只是使用默认设置......我想知道为什么默认情况下不会设置这些设置?
  • 是的,我刚刚检查了一下,那些标志已经在那里了......还有其他想法吗?
  • 我也不能使用函数yaml_parse,它不是一个类别,所以这似乎不是一个类别相关的问题...
  • 试试fruitstandsoftware.com/blog/2012/08/…上描述的调试技巧
  • 我知道它是从哪里发送的,这不是问题。再一次,忘记我曾经提到过选择器。我在 YAML 库中有一个 C 函数,yaml_parse,虽然包含了头文件,但链接器找不到 C 函数。为什么不呢?
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多