【问题标题】:Xcode 6 "Terminating app due to uncaught exception"Xcode 6“由于未捕获的异常而终止应用程序”
【发布时间】:2015-01-05 19:13:02
【问题描述】:

我正在研究 Xcode 6。我正在学习一个解释如何使用标签栏控制器和表格视图的教程。教程的第一部分很好,然后在添加额外的控制器并运行应用程序后,我在控制台中收到以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle(已加载)”,名称为“Mrk-WH-vzE-view-zyB-06-j66”

然后我创建了一个全新的项目,只添加了会带来麻烦的额外控制器。问题依然存在。我做了一些调试,发现代码在到达这个特定行时会崩溃:

self.items = [NSMutableArray array];

在我声明的头文件中:

@property (nonatomic) NSMutableArray *items;

如有需要,我可以提供.m文件的所有代码。

奇怪的是,在我根据教程重新创建的第一个项目中,这段代码在某个类中有效;当我添加第二个类并将相同的代码放入其中时,应用程序开始崩溃(它在第二个类中崩溃)。

我不确定所提供的信息是否足够——如果不是,请告诉我。

更新: 好的,我有一些新信息。我决定准备代码并将其发布在这里。我开始评论一些事情,看看哪些可以发布,哪些不相关。 我发现导致崩溃的并不完全是那条线(我使用 F6 而不是 F7)。我意识到,在那一行之后,代码转到另一个函数

    - (void)setItems:(NSMutableArray *)items {
if (_items != items) {
    _items = items;

    // Build Shopping List
    [self buildShoppingList];
}}


    - (void)buildShoppingList {
NSMutableArray *buffer = [[NSMutableArray alloc] init];

for (int i = 0; i < [self.items count]; i++) {
    Item *item = [self.items objectAtIndex:i];
    if ([item inShoppingList]) {
        // Add Item to Buffer
        [buffer addObject:item];
    }
}

// Set Shopping List
self.shoppingList = [NSArray arrayWithArray:buffer];  }


    - (void)setShoppingList:(NSArray *)shoppingList {
if (_shoppingList != shoppingList) {
    _shoppingList = shoppingList;

    // Reload Table View
    [self.tableView reloadData];
}}

并且代码似乎在该行崩溃

[self.tableView reloadData];

我想这是一个完全不同的场景。 代码首先在 setItems 中,然后在以下函数中

/// 12 月 22 日更新 我找不到崩溃日志,但这是堆栈跟踪

        * thread #1: tid = 0x7e4a, 0x00000001065bbb8a libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
        * frame #0: 0x00000001065bbb8a libobjc.A.dylib`objc_exception_throw
        frame #1: 0x0000000106922e6d CoreFoundation`+[NSException raise:format:] + 205
        frame #2: 0x0000000106fd48c3 UIKit`-[UINib instantiateWithOwner:options:] + 552
        frame #3: 0x0000000106e33f98 UIKit`-[UIViewController _loadViewFromNibNamed:bundle:] + 242
        frame #4: 0x0000000106e34588 UIKit`-[UIViewController loadView] + 109
        frame #5: 0x0000000106ff1368 UIKit`-[UITableViewController loadView] + 76
        frame #6: 0x0000000106e347f9 UIKit`-[UIViewController loadViewIfRequired] + 75
        frame #7: 0x0000000106e34c8e UIKit`-[UIViewController view] + 27
        frame #8: 0x0000000106ff10e3 UIKit`-[UITableViewController tableView] + 30
        frame #9: 0x000000010608caf0 Prova`-[ShoppingListViewController setShoppingList:](self=0x00007fa5c3d32b70, _cmd=0x000000010608d754, shoppingList=0x00007fa5c3f03d90) + 112 at ShoppingListViewController.m:75
        frame #10: 0x000000010608ca50 Prova`-[ShoppingListViewController buildShoppingList](self=0x00007fa5c3d32b70, _cmd=0x000000010608d70c) + 400 at ShoppingListViewController.m:67
        frame #11: 0x000000010608c8a0 Prova`-[ShoppingListViewController setItems:](self=0x00007fa5c3d32b70, _cmd=0x000000010c0eaaea, items=0x00007fa5c3d2fc90) + 112 at ShoppingListViewController.m:51
        frame #12: 0x000000010608cf20 Prova`-[ShoppingListViewController loadItems](self=0x00007fa5c3d32b70, _cmd=0x000000010608d6a8) + 288 at ShoppingListViewController.m:111
        frame #13: 0x000000010608c6fd Prova`-[ShoppingListViewController initWithCoder:](self=0x00007fa5c3d32b70, _cmd=0x00000001087b740f, aDecoder=0x00007fa5c5828600) + 189 at ShoppingListViewController.m:28
        frame #14: 0x0000000106fd59dd UIKit`-[UIClassSwapper initWithCoder:] + 205
        frame #15: 0x000000010713a6c6 UIKit`UINibDecoderDecodeObjectForValue + 705
        frame #16: 0x000000010713a895 UIKit`UINibDecoderDecodeObjectForValue + 1168
        frame #17: 0x000000010713a3fc UIKit`-[UINibDecoder decodeObjectForKey:] + 276
        frame #18: 0x0000000106e317aa UIKit`-[UIViewController initWithCoder:] + 927
        frame #19: 0x0000000106e53ec4 UIKit`-[UINavigationController initWithCoder:] + 51
        frame #20: 0x000000010713a6c6 UIKit`UINibDecoderDecodeObjectForValue + 705
        frame #21: 0x000000010713a895 UIKit`UINibDecoderDecodeObjectForValue + 1168
        frame #22: 0x000000010713a3fc UIKit`-[UINibDecoder decodeObjectForKey:] + 276
        frame #23: 0x0000000106e317aa UIKit`-[UIViewController initWithCoder:] + 927
        frame #24: 0x0000000106e704aa UIKit`-[UITabBarController initWithCoder:] + 51
        frame #25: 0x000000010713a6c6 UIKit`UINibDecoderDecodeObjectForValue + 705
        frame #26: 0x000000010713a3fc UIKit`-[UINibDecoder decodeObjectForKey:] + 276
        frame #27: 0x0000000106fd55d6 UIKit`-[UIRuntimeConnection initWithCoder:] + 153
        frame #28: 0x000000010713a6c6 UIKit`UINibDecoderDecodeObjectForValue + 705
        frame #29: 0x000000010713a895 UIKit`UINibDecoderDecodeObjectForValue + 1168
        frame #30: 0x000000010713a3fc UIKit`-[UINibDecoder decodeObjectForKey:] + 276
        frame #31: 0x0000000106fd4a79 UIKit`-[UINib instantiateWithOwner:options:] + 990
        frame #32: 0x000000010725e572 UIKit`-[UIStoryboard instantiateViewControllerWithIdentifier:] + 181
        frame #33: 0x0000000106d0eb92 UIKit`-[UIApplication _loadMainStoryboardFileNamed:bundle:] + 65
        frame #34: 0x0000000106d0dc19 UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1075
        frame #35: 0x0000000106d0cbf2 UIKit`-[UIApplication workspaceDidEndTransaction:] + 179
        frame #36: 0x00000001094de2a3 FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke + 16
        frame #37: 0x000000010685853c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
        frame #38: 0x000000010684e285 CoreFoundation`__CFRunLoopDoBlocks + 341
        frame #39: 0x000000010684e045 CoreFoundation`__CFRunLoopRun + 2389
        frame #40: 0x000000010684d486 CoreFoundation`CFRunLoopRunSpecific + 470
        frame #41: 0x0000000106d0c669 UIKit`-[UIApplication _run] + 413
        frame #42: 0x0000000106d0f420 UIKit`UIApplicationMain + 1282
        frame #43: 0x000000010608d428 Prova`main(argc=1, argv=0x00007fff59b73390) + 184 at main.m:15
        frame #44: 0x0000000108eb2145 libdyld.dylib`start + 1

线

[self.tableView reloadData];

对应

  frame #9: 0x000000010608caf0 Prova`-[ShoppingListViewController setShoppingList:](self=0x00007fa5c3d32b70, _cmd=0x000000010608d754, shoppingList=0x00007fa5c3f03d90) + 112 at ShoppingListViewController.m:75

表视图委托是

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [self.shoppingList count];

}

self.shoppingList 应该是一个包含 0 个元素的数组。但是代码似乎没有到达该行

 return [self.shoppingList count];

因为它之前停在行

 [self.tableView reloadData];

我还认为可能是嵌入这个崩溃类的导航控制器负责,所以我将其删除并使用自定义类将主标签栏控制器直接连接到该项目,但没有任何改变,总是同样的错误

【问题讨论】:

  • 嗯。它说它无法加载某个 NIB(这是一个用户界面文件,通常以 *.xib 结尾)。你的视图控制器有对应的 xib 文件吗?
  • 该属性应声明为@property (strong, nonatomic) NSMutableArray *items;。不知道为什么这与无法加载笔尖有关。
  • 从 nib 文件的名称来看,您似乎正在从情节提要加载视图控制器,并且控制器无法从情节提要加载其视图。如果是这种情况,您需要在情节提要本身而不是代码中纠正问题。
  • 它实际上可能在关于 items 数组的行之前崩溃。仔细检查故事板中文件、类和标识符的名称是否存在拼写错误和不一致。您是否可能在一个地方使用了像 secondController 这样的名称,但在另一个地方使用了 Secondcontroller,所以存在冲突并且它无法找到/加载正确的 NIB(这是错误告诉您的)。
  • 你能给我们一些关于那条线的背景信息吗?之前和之后会发生什么?

标签: ios objective-c xcode


【解决方案1】:

我有另一个更新。今天换了电脑,又下载了xcode,试了下运行项目。。。。可以。。。不明白为什么,这几天有没有新的Xcode发布?

【讨论】:

    【解决方案2】:

    变化:

    self.items = [NSMutableArray array];

    self.items = [[NSMutableArray alloc] init];

    【讨论】:

    • 那有什么作用?
    • @Sara 正在尝试创建一个NSMutableArray,但NSMutableArray 没有方法array。所以它抛出一个异常。
    • 并且NSMutableArray 不会继承另一个具有array 类方法的类,也许?
    • 这不是问题。 +[NSMutableArray array] 覆盖 +[NSArray array] 以返回一个可变数组,尽管 NSMutableArray 文档中没有提到这一点。此外,粘贴的错误并未反映您的建议。
    • 噢!对于那个很抱歉。我什至没有考虑子类。这将教会我在感冒时回答问题。 :( 感谢您纠正我@Droppy。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多