有人可以解释我在尝试使用基于视图的NSOutlineView时遇到的崩溃吗? 崩溃只发生在OS X Lion(10.7)上,而不是Mountain Lion(10.8)。如果我在ML上运行应用程序,一切正常。但是,如果我在Lion上运行它,它崩溃与下面的“无法解码类的对象(NSSourceListBackgroundView)”错误。即使我将构建目标(不仅仅是部署目标)设置为10.7 SDK(它是针对没有警告或错误的10.7和10.8 SDK构建,并且在针对任何一个构建时在10.8上运行正常),也会发生这种情况。
我是否在不知不觉中使用了一些仅由10.8开发的功能,而这些功能并未被编译器标记?我已经自定义了大纲视图使用的NSTableCellView和NSTableRowView对象的背景,如果这很重要,我的应用程序使用Autolayout。我在Apple更新日志,头文件或NSOutlineView / NSTableView文档中找不到任何关于此的内容,我认为基于视图的NSOutlineViews与10.7兼容。我之前已经广泛使用过NSTableView,并且从未遇到过这样的问题,尽管这是我第一次尝试使用NSOutlineView。
我在谷歌和其他一些地方搜索过这个,而我能找到的只是在德语网站上看起来像是一个相同问题的讨论,似乎没有解决方案(来自我用谷歌翻译告诉我的事情。
*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (NSSourceListBackgroundView)
0 CoreFoundation 0x00007fff944fcf56 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff95110d5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff944fcd8a +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff944fcd14 +[NSException raise:format:] + 116
4 Foundation 0x00007fff96f29705 _decodeObjectBinary + 2714
5 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
6 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
7 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
8 Foundation 0x00007fff96f28ab2 _decodeObject + 201
9 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
10 AppKit 0x00007fff91e2667f -[NSScrollView initWithCoder:] + 240
11 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
12 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
13 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
14 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
15 Foundation 0x00007fff96f28ab2 _decodeObject + 201
16 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
17 AppKit 0x00007fff91e083a1 -[NSCustomView initWithCoder:] + 652
18 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
19 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
20 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
21 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
22 Foundation 0x00007fff96f28ab2 _decodeObject + 201
23 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
24 AppKit 0x00007fff91e083a1 -[NSCustomView initWithCoder:] + 652
25 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
26 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
27 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
28 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
29 Foundation 0x00007fff96f28ab2 _decodeObject + 201
30 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
31 AppKit 0x00007fff91e083a1 -[NSCustomView initWithCoder:] + 652
32 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
33 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
34 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
35 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
36 Foundation 0x00007fff96f28ab2 _decodeObject + 201
37 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
38 AppKit 0x00007fff91e083a1 -[NSCustomView initWithCoder:] + 652
39 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
40 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
41 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
42 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
43 Foundation 0x00007fff96f28ab2 _decodeObject + 201
44 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
45 AppKit 0x00007fff91e279cf -[NSClipView initWithCoder:] + 56
46 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
47 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
48 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
49 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
50 Foundation 0x00007fff96f28ab2 _decodeObject + 201
51 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
52 AppKit 0x00007fff91e2667f -[NSScrollView initWithCoder:] + 240
53 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
54 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
55 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
56 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
57 Foundation 0x00007fff96f28ab2 _decodeObject + 201
58 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
59 AppKit 0x00007fff91e083a1 -[NSCustomView initWithCoder:] + 652
60 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
61 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
62 Foundation 0x00007fff96f0145c -[NSArray(NSArray) initWithCoder:] + 486
63 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
64 Foundation 0x00007fff96f28ab2 _decodeObject + 201
65 AppKit 0x00007fff91e08832 -[NSView initWithCoder:] + 1051
66 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
67 Foundation 0x00007fff96f28ab2 _decodeObject + 201
68 AppKit 0x00007fff91ef993e -[NSWindowTemplate initWithCoder:] + 3998
69 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
70 Foundation 0x00007fff96f2a976 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1193
71 Foundation 0x00007fff96f2a377 -[NSSet(NSSet) initWithCoder:] + 519
72 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
73 Foundation 0x00007fff96f28ab2 _decodeObject + 201
74 AppKit 0x00007fff91d0d1b9 -[NSIBObjectData initWithCoder:] + 2099
75 Foundation 0x00007fff96f29797 _decodeObjectBinary + 2860
76 Foundation 0x00007fff96f28ab2 _decodeObject + 201
77 AppKit 0x00007fff91d0c864 loadNib + 235
78 AppKit 0x00007fff91d0bdb8 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217
79 AppKit 0x00007fff91d0bcd3 +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141
80 AppKit 0x00007fff91d0bc16 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364
81 AppKit 0x00007fff91f7ccd7 NSApplicationMain + 398
其他信息: 由于NSSourceListBackgroundView显然不是公共API的一部分,所以我开始寻找实例化它的位置。通过查看我的.xib文件中的XML,我能够确定它们显然是包含有问题的NSOutlineView的NSScrollView的子视图(因此IB将它们放在那里,显然是?)。我插入了一个日志语句来转储NSScrollView的子视图,那里有一堆NSSourceListBackgroundView对象。
正如预期的那样,有两个NSScroller对象和一个NSClipView。但是还有一堆这些NSSourceListBackgroundView对象显然无法在Lion上实例化(并且没有我可以看到的相应公共头文件)。除了NSOutlineView之外,我的其他基于视图的NSTableView对象都没有。
另外,我没有将高亮样式设置为“源列表”:它设置为“无”。
有谁知道这些对象的用途是什么,或者为什么IB将它们添加到我的XIB文件中?我的XIB是否已损坏?我真的不必重建它,所以我希望不会。
答案 0 :(得分:1)
我最后通过简单地从我的xib文件中删除整个NSOutlineView及其包含NSScrollView并从头开始以完全相同的方式重建它来解决这个问题。当我这样做时,神秘的NSSourceListBackgroundView对象不再存在于xib中,并且Lion上的崩溃停止了。没有它们,狮子和山狮似乎仍然可以完美地运作。
我从来没有找到一个很好的解释,为什么他们一直在那里(并且如果有人可以重现它会感兴趣),但我的猜测是这是由Xcode / IB错误引起的。我在过去已经注意到,由IB创建的文件可能有点“脆弱”并且不能容忍他们的选项(这有点烦人,因为它很容易改变选项,这有点像IB而不只是在代码中做所有事情)。所以我可能在UI的那部分上改变了一些选项,将这些对象留在xib中作为“cruft”,因为IB没有清理它。重建它时直接进入最终设计避免了这个问题。