升级到Yosemite之后,当我在我的应用程序中运行NSSavePanel时,我遇到了一个非常奇怪的崩溃。例如,我选择openDocument:它崩溃了。或者我打开面板浏览文件然后崩溃。
An uncaught exception was raised
2014-10-24 09:51:28.429 MyApp[2240:374020] *** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array
2014-10-24 09:51:28.431 MyApp[2240:374020] (
0 CoreFoundation 0x97c59343 __raiseError + 195
1 libobjc.A.dylib 0x973bea2a objc_exception_throw + 276
2 CoreFoundation 0x97b1cf8c -[__NSArrayI objectAtIndex:] + 204
3 MyApp 0x0013c830 -[NSArray(CocoaDevUsersAdditions) firstObject] + 41
4 AppKit 0x94567f16 _NSAccessibilityEntryPointValueForAttribute + 2116
5 AppKit 0x9456829e NSAccessibilityEntryPointValueForAttribute + 24
6 AppKit 0x9435ff4c ValueOfAttributeWithDefault + 80
7 AppKit 0x94090fa2 NSAccessibilityChildren + 47
8 AppKit 0x94090f48 NSAccessibilityUnignoredChildrenForOnlyChild + 99
9 AppKit 0x94090e50 NSAccessibilityUnignoredDescendant + 42
10 AppKit 0x94213a51 -[NSNibAXRelationshipConnector establishConnection] + 130
11 AppKit 0x9453e342 -[NSIBObjectData nibInstantiateWithOwner:options:topLevelObjects:] + 1061
12 AppKit 0x93ffaad7 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 56
13 AppKit 0x945debdd -[NSNib _instantiateNibWithExternalNameTable:options:] + 735
14 AppKit 0x941a3f77 -[NSNib instantiateNibWithOwner:topLevelObjects:] + 277
15 AppKit 0x94651cee -[NSSavePanel(NSSavePanelLayout) _initContentView] + 189
16 AppKit 0x9463d317 -[NSSavePanel initWithContentRect:styleMask:backing:defer:] + 645
17 AppKit 0x9463c6db +[NSSavePanel _crunchyRawUnbonedPanel] + 216
18 AppKit 0x945e978a +[NSOpenPanel openPanel] + 33
19 AppKit 0x944b66fb -[NSDocumentController _setupOpenPanel] + 42
20 AppKit 0x944b6b62 -[NSDocumentController beginOpenPanelWithCompletionHandler:] + 96
21 AppKit 0x944b6630 -[NSDocumentController openDocument:] + 413
22 libobjc.A.dylib 0x973bc853 -[NSObject performSelector:withObject:] + 70
23 AppKit 0x94380328 __36-[NSApplication sendAction:to:from:]_block_invoke + 51
24 libsystem_trace.dylib 0x9096dc03 _os_activity_initiate + 89
25 AppKit 0x941f3a11 -[NSApplication sendAction:to:from:] + 548
26 AppKit 0x9420f9ed -[NSMenuItem _corePerformAction] + 479
27 AppKit 0x9420f6c9 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 162
28 AppKit 0x9420ed54 -[NSMenu _performActionWithHighlightingForItemAtIndex:sendAccessibilityNotification:] + 79
29 AppKit 0x94585872 __38-[NSMenu performActionForItemAtIndex:]_block_invoke + 52
30 libsystem_trace.dylib 0x9096dc03 _os_activity_initiate + 89
31 AppKit 0x94260736 -[NSMenu performActionForItemAtIndex:] + 141
32 AppKit 0x9426069e -[NSMenu _internalPerformActionForItemAtIndex:] + 45
33 AppKit 0x94260669 -[NSMenuItem _internalPerformActionThroughMenuIfPossible] + 106
34 AppKit 0x942604c1 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 120
35 AppKit 0x94204487 NSSLMMenuEventHandler + 679
36 HIToolbox 0x905a45d4 _Z22_InvokeEventHandlerUPPP25OpaqueEventHandlerCallRefP14OpaqueEventRefPvPFlS0_S2_S3_E + 36
37 HIToolbox 0x903ee501 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 2291
38 HIToolbox 0x903ed4dc _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 402
39 HIToolbox 0x90400d25 SendEventToEventTarget + 88
40 HIToolbox 0x905a4452 _ZL18SendHICommandEventmPK9HICommandmmhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 447
41 HIToolbox 0x904650cc SendMenuCommandWithContextAndModifiers + 72
42 HIToolbox 0x90465074 SendMenuItemSelectedEvent + 207
43 HIToolbox 0x90464f38 _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 145
44 HIToolbox 0x905fb902 _ZL14MenuSelectCoreP8MenuData5PointdmPP13OpaqueMenuRefPt + 775
45 HIToolbox 0x9046c266 _HandleMenuSelection2 + 512
46 HIToolbox 0x9046c050 _HandleMenuSelection + 55
47 AppKit 0x94182f3b _NSHandleCarbonMenuEvent + 359
48 AppKit 0x9400e321 _DPSNextEvent + 1702
49 AppKit 0x9400d7a1 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 186
50 AppKit 0x93ffff6c -[NSApplication run] + 907
51 AppKit 0x93fe94d0 NSApplicationMain + 2082
52 MyApp 0x00003215 start + 53
答案 0 :(得分:3)
这是您正在使用的扩展程序类的错误。 NSArray+CocoaDevUsersAdditions
firstObject
方法实施错误。您发布的崩溃日志的相关部分包括以下三行:
1 libobjc.A.dylib 0x973bea2a objc_exception_throw + 276
2 CoreFoundation 0x97b1cf8c -[__NSArrayI objectAtIndex:] + 204
3 MyApp 0x0013c830 -[NSArray(CocoaDevUsersAdditions) firstObject] + 41
当您尝试访问不包含对象的数组的索引0时,会发生index 0 beyond bounds for empty array
错误。
我发现一些代码我认为与this URL
NSArray+CocoaDevUsersAdditions
类匹配
-(id)firstObject
{
return [self objectAtIndex:0];
}
上面的代码错了。它应该首先检查对象的数量。正确的代码应如下所示:
-(id)firstObject
{
id result = nil;
if (self.count > 0) {
result = [self objectAtIndex:0];
}
return result;
}
所以问题是您使用的NSArray
扩展程序实现错误。
最佳解决方案:移除您的NSArray+CocoaDevUsersAdditions
类别,并使用firstObject
上的公开NSArray
方法