【问题标题】:many object libraries do not work许多对象库不起作用
【发布时间】:2012-04-22 12:57:36
【问题描述】:

我刚开始学习可可编程。我试图构建一个简单的图像查看器。我创建了一个新项目,然后从对象库中添加了一个图像查看器。问题是我得到了一个我什至无法通过谷歌搜索找到的错误。

2012-04-21 20:36:20.620 ImageViewer[2095:403] An uncaught exception was raised
2012-04-21 20:36:20.621 ImageViewer[2095:403] *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (IKImageView)
2012-04-21 20:36:20.624 ImageViewer[2095:403] (
    0   CoreFoundation                      0x00007fff83a42fc6 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff89dd3d5e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff83a42dfa +[NSException raise:format:arguments:] + 106
    3   CoreFoundation                      0x00007fff83a42d84 +[NSException raise:format:] + 116
    4   Foundation                          0x00007fff8b957729 _decodeObjectBinary + 2714
    5   Foundation                          0x00007fff8b95899a -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
    6   Foundation                          0x00007fff8b92f480 -[NSArray(NSArray) initWithCoder:] + 486
    7   Foundation                          0x00007fff8b9577bb _decodeObjectBinary + 2860
    8   Foundation                          0x00007fff8b956ad6 _decodeObject + 201
    9   AppKit                              0x00007fff8eceac18 -[NSView initWithCoder:] + 1051
    10  Foundation                          0x00007fff8b9577bb _decodeObjectBinary + 2860
    11  Foundation                          0x00007fff8b956ad6 _decodeObject + 201
    12  AppKit                              0x00007fff8eddc106 -[NSWindowTemplate initWithCoder:] + 3998
    13  Foundation                          0x00007fff8b9577bb _decodeObjectBinary + 2860
    14  Foundation                          0x00007fff8b95899a -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
    15  Foundation                          0x00007fff8b95839b -[NSSet(NSSet) initWithCoder:] + 519
    16  Foundation                          0x00007fff8b9577bb _decodeObjectBinary + 2860
    17  Foundation                          0x00007fff8b956ad6 _decodeObject + 201
    18  AppKit                              0x00007fff8ebed99d -[NSIBObjectData initWithCoder:] + 2099
    19  Foundation                          0x00007fff8b9577bb _decodeObjectBinary + 2860
    20  Foundation                          0x00007fff8b956ad6 _decodeObject + 201
    21  AppKit                              0x00007fff8ebed048 loadNib + 235
    22  AppKit                              0x00007fff8ebec59c +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217
    23  AppKit                              0x00007fff8ebec4b7 +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141
    24  AppKit                              0x00007fff8ebec3fa +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364
    25  AppKit                              0x00007fff8ee5f9b3 NSApplicationMain + 398
    26  ImageViewer                         0x00000001087035a2 main + 34
    27  ImageViewer                         0x0000000108703574 start + 52
    28  ???                                 0x0000000000000003 0x0 + 3
)

看起来..我需要链接一个框架,但是cocoa框架已经链接了。

我还有什么需要检查的吗?

【问题讨论】:

    标签: xcode cocoa imagekit


    【解决方案1】:

    堆栈跟踪抱怨缺少 IKImageView 类,该类是 ImageKit 的一部分,而 ImageKit 又是 Quartz 框架的一部分。

    您需要将Quartz.framework 添加到项目中。

    【讨论】:

    • 感谢您的回答。我不得不选择 Caleb 的答案,因为他发布的早一点。
    • 很遗憾,我不认为他的回答是正确的。没有可以添加到项目中的 ImageKit.framework,因为它嵌入在 Quartz.framework 中,这是您必须添加的框架。
    • //你是对的。刚刚确认没有 ImageKit 框架..reverted。谢谢!
    • @mttrb 通过添加 Quartz 伞形框架将 ImageKit 框架添加到项目中是公平的,但这并不会改变您实际上的事实将 ImageKit 添加到您的项目中。在您的项目中点击 Quartz 旁边的显示三角形,您将在那里看到 ImageKit。对于 OP:您可以通过查看类参考页面顶部的“框架”行来判断为任何类添加哪个框架;如果它是 ImageKit 等伞形框架的一部分,您也会看到。
    • @caleb 是的,我意识到你所做的区别,但 OP 说他们是 Cocoa 编程的新手,他们会直接回来说没有要添加的 ImageKit.framework。
    【解决方案2】:

    -[NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(IKImageView)

    您是否将 ImageKit 框架添加到您的项目中?除非您这样做,否则您的应用不会包含定义 IKImageView 的代码。

    【讨论】:

    • 好吧..嗯..一个问题。当我没有关联的框架时,Xcode 是如何允许我添加对象的?每次从库中添加新对象时,是否需要找出需要添加的框架?我觉得这有点烦人..有更好的解决方案吗?
    • 您刚刚将对象添加到 .xib 或情节提要中,这基本上是一个数据文件。我想如果 Xcode 提供为您将相关框架添加到您的项目中可能会很好,但事实并非如此。如果您觉得这很有用,请提交一个错误。不过,有了一点经验,这不是什么大问题。您当然应该知道您正在使用的对象来自哪个框架(两个字母前缀通常是一个强有力的线索)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多