每次打开新窗口时XCode 4.2.1会崩溃

5
我有适用于Lion的Xcode 4.2.1版本,每次在新窗口中打开任何内容时(例如双击任何文件),它都会崩溃。 在这种情况下,文件类型并不重要。 它将无论是.h、.m、.xib、.plist等文件都会崩溃... 我已重新安装了Xcode,但无济于事。 直到最近才出现此问题,但一旦发生便会不断出现。

似乎与当前打开的项目无关,因为我已经关闭了所有项目并打开了一个新项目,但仍然存在此问题。

更新:请参阅下面的答案,了解我最终如何解决此问题。

这是我收到的异常:

UNCAUGHT EXCEPTION (NSUnknownKeyException): [<__NSCFConstantString 0x7fff7e9e38e0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key file://localhost/Projects/SomeProject/SomeFile.plist.
UserInfo: {
    NSTargetObjectUserInfoKey = "";
    NSUnknownUserInfoKey = "file://localhost/Projects/SomeProject/SomeFile.plist";
}
Hints: None
Backtrace:
  0  0x00007fff979c426a __exceptionPreprocess (in CoreFoundation)
  1  0x00007fff983acd5e objc_exception_throw (in libobjc.A.dylib)
  2  0x00007fff97a4e4c9 -[NSException raise] (in CoreFoundation)
  3  0x00007fff8f9a8783 -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] (in Foundation)
  4  0x00007fff8f8df462 _NSGetUsingKeyValueGetter (in Foundation)
  5  0x00007fff8f8df3e9 -[NSObject(NSKeyValueCoding) valueForKey:] (in Foundation)
  6  0x00007fff8f8df101 -[NSArray(NSKeyValueCoding) valueForKey:] (in Foundation)
  7  0x000000010a2ced12 -[IDEWorkspaceDocument _defaultPrimaryEditorFrameSizeForDocumentURL:] (in IDEKit)
  8  0x000000010a307d62 -[IDEWorkspaceWindowController _changeSizeForSimpleEditorWindowLayoutWithEditorDocumentURLOrNil:workspaceTabController:] (in IDEKit)
  9  0x000000010a30827d -[IDEWorkspaceWindowController _revertForNewWindowWithTabStateContext:documentURL:simpleEditorWindowLayout:completionBlock:] (in IDEKit)
 10  0x000000010a2cf795 -[IDEWorkspaceDocument _makeTabbedWindowControllerWithStateFromTabController:documentURL:simpleEditorWindowLayout:frontmost:completionBlock:] (in IDEKit)
 11  0x000000010a2f4188 +[IDEEditorCoordinator _doOpenIn_NewWindow_withWorkspaceTabController:documentURL:usingBlock:] (in IDEKit)
 12  0x000000010a2f4c41 +[IDEEditorCoordinator _doOpenIn_SeparateWindow_withWorkspaceTabController:documentURL:usingBlock:] (in IDEKit)
 13  0x000000010a2599ba +[IDEEditorCoordinator _doOpenWithWorkspaceTabController:editorContext:target:allowFallback:documentURL:usingBlock:] (in IDEKit)
 14  0x000000010a2f4dd5 +[IDEEditorCoordinator _doOpenEditorOpenSpecifier:forWorkspaceTabController:editorContext:target:takeFocus:] (in IDEKit)
 15  0x000000010a259353 -[_IDEOpenRequest _runIfNecessary] (in IDEKit)
 16  0x000000010a258d3a -[_IDEOpenRequest _enqueueForEventBehavior:] (in IDEKit)
 17  0x000000010a258855 +[IDEEditorCoordinator _openRequestForEditorOpenSpecifier:workspaceTabController:editorContext:eventBehavior:takeFocus:] (in IDEKit)
 18  0x000000010a2587ac __99+[IDEEditorCoordinator _openEditorOpenSpecifier:forWorkspaceTabController:eventBehavior:takeFocus:]_block_invoke_0 (in IDEKit)
 19  0x000000010a258740 _performBlockInsideReentrantGuard (in IDEKit)
 20  0x000000010a2586b5 +[IDEEditorCoordinator _openEditorOpenSpecifier:forWorkspaceTabController:eventBehavior:takeFocus:] (in IDEKit)
 21  0x000000010a25839d +[IDEEditorCoordinator openEditorOpenSpecifier:forWorkspaceTabController:eventType:] (in IDEKit)
 22  0x000000010a2579a1 -[IDEOutlineBasedNavigator _openNavigableItem:eventType:] (in IDEKit)
 23  0x00007fff979b3a1d -[NSObject performSelector:withObject:] (in CoreFoundation)
 24  0x00007fff8df32710 -[NSApplication sendAction:to:from:] (in AppKit)
 25  0x0000000109b1fd10 -[DVTApplication sendAction:to:from:] (in DVTKit)
 26  0x000000010a207cf4 -[IDEApplication sendAction:to:from:] (in IDEKit)
 27  0x00007fff8df32642 -[NSControl sendAction:to:] (in AppKit)
 28  0x000000010a25776f -[IDENavigatorOutlineView sendAction:to:] (in IDEKit)
 29  0x00007fff8df98f48 -[NSTableView _sendAction:to:row:column:] (in AppKit)
 30  0x00007fff8df95d0f -[NSTableView mouseDown:] (in AppKit)
 31  0x00007fff8e313592 -[NSOutlineView mouseDown:] (in AppKit)
 32  0x000000010a256274 -[IDENavigatorOutlineView mouseDown:] (in IDEKit)
 33  0x00007fff8defb0e0 -[NSWindow sendEvent:] (in AppKit)
 34  0x00007fff8de9368f -[NSApplication sendEvent:] (in AppKit)
 35  0x000000010a207a11 -[IDEApplication sendEvent:] (in IDEKit)
 36  0x00007fff8de29682 -[NSApplication run] (in AppKit)
 37  0x00007fff8e0a880c NSApplicationMain (in AppKit)
 38  0x0000000109901eec (in Xcode)
 39  0x0000000000000002
6个回答

2
堆栈跟踪显示一个 NSArray 对象,该对象使用键 "file://localhost/Projects/SomeProject/SomeFile.plist" 发送了 valueForKey: 消息。这只是将 valueForKey: 发送给数组中的每个对象。其中一个对象是一个空的 NSString,它只有默认的 NSObjectvalueForKey: 实现,自然不知道上面的键(@"file://..."),因此会抛出异常。

发送 valueForKey: 消息给 NSArray 的方法是 IDEKit 中的 -[IDEWorkspaceDocument _defaultPrimaryEditorFrameSizeForDocumentURL:]

因此,我使用 hopper disassembler 在 IDEKit (/Developer/Library/PrivateFrameworks/IDEKit.framework/Versions/A/IDEKit) 中反汇编了这个方法。

我的结论是,这种方法从Xcode的[NSUserDefaults standardUserDefault]读取一个NSArray,使用键@"IDEDefaultPrimaryEditorFrameSizeForPaths"。然后发送valueForKey:与文件路径,希望找到文件编辑器的框架大小,但实际上却导致错误。问题可能是这个NSUserDefaults条目变得无效了(它是一个具有意外内容的NSArray,或者它甚至不应该是一个NSArray)。
因此,清除Xcode偏好设置的可能性很高会有所帮助,正如@RAZ所建议的一样 :-) (不确定它是否有所帮助,因为用户默认值可能在运行时由Xcode注册 - 但它可能有用)。
另一个(不太有趣但实用的 :-))解决方案是将Xcode重新安装到非默认位置。安装时,可以选择自定义安装文件夹。这将在原始副本旁边安装一个全新的Xcode副本。

不幸的是,清除所有首选项并没有起作用。我很快就要尝试新的安装了。 - dtuckernet
尝试从终端运行:defaults delete com.apple.dt.Xcode。确保先退出Xcode。 - Danra
我之前尝试过那个方法,但它没有解决问题。 - dtuckernet

1

重置您的模拟器,升级后可能会缓存错误数据。

我也看到过人们通过清除应用程序首选项来修复不良行为的应用程序。

http://hints.macworld.com/article.php?story=20001229001847541

先备份一下,你说你重新安装了,但有些安装程序不会重置首选项。


它不会在模拟器中发生 - 它会在Xcode中发生。这种情况甚至在模拟器未运行时也会发生。 - dtuckernet

0

我自己在Xcode中也遇到了类似的问题,而且我看到一些人在论坛上经历了与Xcode本身相关的错误。修复磁盘权限可能有所帮助,但我无法确认。不过值得一试。


0

以下是我如何修复的:

  • 前往 -> 主目录 -> 自动保存信息 -> 选择所有与Xcode相关的文件并将其删除
  • 在Finder中清空废纸篓
  • 重新启动Apple设备

0

对我来说,答案最终是多种因素的组合。由于某种原因,Xcode 4.2.x 引发了问题。我最终升级到 Xcode 4.3,但问题仍然存在。在更新后清除 Xcode 的首选项后,问题消失了。我尝试了很多次 Xcode 4.2.x,但即使清除了首选项也无法解决问题。

我很高兴问题得到了解决,但我不知道如何在不升级到 Xcode 4.3 的情况下解决它。


0

这只是一个猜测,它是否发生在新用户账户中?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接