2

Может кто-нибудь объяснить эту ошибку, которую я получаю при попытке использовать NSOutlineView на основе представлений? Крушение происходит только на OS X Lion (10.7), а не на Mountain Lion (10.8). Если я запустил приложение на ML, все будет хорошо. Но если я запустил его на Lion, он сработает с ошибкой «Невозможно декодировать объект класса (NSSourceListBackgroundView)» ниже. Это происходит даже в том случае, если я устанавливаю цель сборки (а не только цель развертывания) в 10.7 SDK (он строит против 10.7 и 10.8 SDK без предупреждений или ошибок и отлично работает на 10.8 при построении на них).View-based NSOutlineView Lion Обратная совместимость?

Я не знаю, используя функцию 10.8 только здесь, которая не помечена компилятором? Я настроил фоны объектов NSTableCellView и NSTableRowView, используемых в виде контура, если это имеет значение, и мое приложение использует Autolayout. Я ничего не мог найти в журналах изменений, заголовочных файлах Apple или NSOutlineView/NSTableView, и у меня создалось впечатление, что NSOutlineViews на основе представлений совместимы с 10.7. Раньше я использовал NSTableView и никогда не имел таких проблем, хотя это первый раз, когда я пытался сделать NSOutlineView.

Я искал это в Google и в целом ряде других мест, и все, что я смог найти, - это обсуждение того, что похоже на идентичную проблему на немецком языке, на котором, похоже, не было разрешения (из того, что я мог сказать, используя Google Translate).

*** -[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, я начал искать, где это время экземпляр. От взгляда на XML в моем .xib-файле, я смог определить, что они, по-видимому, являются видимыми в представлении NSScrollView, который содержит рассматриваемый NSOutlineView (поэтому IB помещает их там, по-видимому?). Я вставил оператор журнала, чтобы выгрузить подпрограммы NSScrollView, и там есть множество объектов NSSourceListBackgroundView.

Существует два объекта NSScroller и один NSClipView, как и ожидалось. Но есть также множество этих объектов NSSourceListBackgroundView, которые, по-видимому, не могут быть созданы на Lion (и у них нет соответствующего публичного файла заголовка, который я вижу). Ни один из моих других объектов NSTableView, основанных на представлении, не имеет этого, кроме NSOutlineView.

Кроме того, у меня нет стиля подсветки, установленного в «список источников»: он установлен на «Нет».

Кто-нибудь знает, какова цель этих объектов, или почему IB добавила их в мой XIB-файл? Является ли мой XIB коррумпированным? Я бы ДЕЙСТВИТЕЛЬНО не должен был перестраивать его, поэтому я надеюсь, что нет.

ответ

1

Я закончил это исправлением, просто удалив весь NSOutlineView и содержащий NSScrollView из моего xib-файла и восстановив их точно так же с нуля. Когда я это сделал, таинственные объекты NSSourceListBackgroundView больше не присутствовали в xib, и авария на Lion прекратилась. Кажется, он все еще отлично работает как на льве, так и на горном льве без них.

Я никогда не находил отличного объяснения, почему они когда-либо были там (и было бы интересно, если кто-нибудь сможет его воспроизвести), но я предполагаю, что это было вызвано ошибкой Xcode/IB. В прошлом я заметил, что файлы, созданные IB, могут быть немного «хрупкими» и нетерпимыми из-за множества вариантов их опций (что довольно раздражает, так как облегчить изменение вариантов - это вся суть IB вместо того, чтобы делать все в коде). Поэтому, вероятно, я изменил какой-то вариант на той части пользовательского интерфейса, которая оставила эти объекты позади как «крутые» в xib, потому что IB не очистил его. Переход к окончательному дизайну при его восстановлении избегал проблемы.