Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
适用于iOS模拟器,但不适用于iPhone_Iphone_Objective C_Ios_Xcode - Fatal编程技术网

适用于iOS模拟器,但不适用于iPhone

适用于iOS模拟器,但不适用于iPhone,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,这行代码在iOS模拟器6.0上运行良好,但当我尝试在我的iPhone上运行它(同样运行iOS 6)时,它崩溃了 [menuView addSubview:mvc.view]; 为什么会发生这种情况,我如何修复它 这是代码的更完整版本: SDMenuViewController *mvc = [[SDMenuViewController alloc] init]; [menuView addSubview:mvc.view]; 这就是它的崩溃之处: 2012-10-08 21:32:32.42

这行代码在iOS模拟器6.0上运行良好,但当我尝试在我的iPhone上运行它(同样运行iOS 6)时,它崩溃了

[menuView addSubview:mvc.view];
为什么会发生这种情况,我如何修复它

这是代码的更完整版本:

SDMenuViewController *mvc = [[SDMenuViewController alloc] init];
[menuView addSubview:mvc.view];
这就是它的崩溃之处:

2012-10-08 21:32:32.423 CrunchCalculator1-2[21019:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/EDD23933-CE20-4AFD-A2B1-CDD56AD658E8/CrunchCalculator1-2.app> (loaded)' with name 'SDNestedTableView''
*** First throw call stack:
(0x39cd03e7 0x35ece963 0x39cd0307 0x39ee0fd1 0x39ee05ff 0x39dd9031 0x39e0786d 0x39d63419 0xb20d9 0x39d63541 0x39da3d29 0x39d9fac5 0x39de1199 0xb17c5 0x39da4a71 0x39da45f5 0x39d9c803 0x39d44ce7 0x39d44775 0x39d441b7 0x31e145f7 0x31e14227 0x39ca53e7 0x39ca538b 0x39ca420f 0x39c1723d 0x39c170c9 0x39d9b43d 0x39d98289 0xb1523 0x3792fb20)
libc++abi.dylib: terminate called throwing an exception
2012-10-08 21:32:32.423 CrunchCalculator1-2[21019:907]***由于未捕获的异常“NSInternalInconsistencException”而终止应用程序,原因是:“无法在捆绑包中加载NIB:”名为“SDNestedTableView”的“NSBundle(loaded)”
***第一次抛出调用堆栈:
(0x39cd03e7 0x35ece963 0x39cd0307 0x39ee0fd1 0x39ee05ff 0x39dd9031 0x39e0786d 0x39d63419 0xb20d9 0x39d63541 0x39da3d29 0x39d9fac5 0x39de1199 0xb17c5 0x39da4a71 0x39da45f5 0x39d9c803 0x39D4475 0x39d441b7 0x31e145f7 0x31e14227 0x39ca53e7 0x39ca538b 0x39ca420f 0x39c1723d 0x39C170280xB139B19D9B499)
libc++abi.dylib:terminate调用引发异常

谢谢

您可能应该在第一行中使用
initWithNibName:
insead of just
init
。不确定您的具体问题,但一定要尝试。

您可能应该在第一行中使用
initWithNibName:
insead的
init
。关于您的具体问题,我不太确定,但一定要尝试一下。

我不太确定它在您的模拟器上是如何工作的(当我在我的模拟器上尝试时,我得到了您在原始问题中列出的崩溃)。无论如何,您可以通过查看以下项目来修复它:

  • 主要问题是捆绑包中没有包含NIB。将其添加到项目目标的“复制捆绑资源”,例如:

  • 在查看“复制包资源”的同时,还需要包括
    SDSubCell.xib
    SDGroupCell.xib
    ,并添加所有这些PNG文件

  • 另一方面,虽然它显然不会导致崩溃,但
    SDNestedTableView
    NIB中的“File Owner”基类指的是一个在此项目中不存在的类。那可不好。无论如何,您可能希望将其更改为
    SDMenuViewController
    SDNestedTableViewController


这与你的崩溃有点无关,但当我看这个项目时,我看到了一个令人担忧的结构:

SDMenuViewController *mvc = [[SDMenuViewController alloc] initWithNibName:@"SDNestedTableView" bundle:nil];
[menuView addSubview:mvc.view];
您正在创建一个控制器,抓取它的视图,或者让视图控制器超出范围并被释放(如果您正在使用ARC),或者泄漏它(如果不是ARC)

从最初的问题来看,我不能完全确定您是否正在使用
addSubview
作为转换到新视图的一种方式(这是一种非常糟糕的做法),或者您是否正在使用视图控制器包含。当我查看代码时,似乎您正在执行后一种操作,尽管代码中缺少一些调用。你可能想好好读一读。还有,看看这个

无论如何,上面带有视图控制器
alloc
/
init
和后续的
addSubview
的两行代码将泄漏到非ARC项目中(如果您曾经访问过ARC,则会使其崩溃),并且您的视图层次结构与视图控制器层次结构不同步。我建议您可能需要:

SDMenuViewController *mvc = [[[SDMenuViewController alloc] initWithNibName:@"SDNestedTableView" bundle:nil] autorelease];
[self addChildViewController:mvc];
[mvc didMoveToParentViewController:self];
[menuView addSubview:mvc.view];
注意第一行的
自动释放

视图控制器包含功能强大,但您需要确保完成一些基本的内务管理


最后一次更新:

我注意到这段代码中有一些bug。首先,在
item:setSubItem:forrowatinexpath
中使用
currentSection
将不起作用。您是根据最后一个
展开项设置的。因此,如果在展开任何一项之前单击其中一项,程序将崩溃。最好的方法可能是完全消除
currentSection
变量,并在
item:setSubItem:forRowAtIndexPath
中,使用
item.cellIndexPath.row
而不是变量
currentSection

不幸的是,此修复导致了一个更严重的问题,
SDNestedTable
类本身似乎有一个iOS 6错误。如果在iOS 6上运行此操作,并展开所有项目,滚动到底部,然后滚动回顶部,程序将崩溃,因为
SDGroupItem*项目返回的
setSubItem:forrowatinexpath
cellIndexPath
属性可以解除分配!如果在iOS 6中打开僵尸,您将看到
cellIndexPath
已经发布。我去下载了,发现了同样的问题。问题似乎是
SDGroupCell
中的
cellIndexPath
被定义为
assign
属性(这意味着,如果iOS确定它不再需要它为自己的目的创建的
indepath
,它将被释放,即使
SDGroupCell
维护对该已释放对象的
assign
引用)。只需将
SDGroupCell
cellIndexPath
属性从
assign
更改为
retain
,此iOS 6错误就会消失。我已将此问题通知
SDNestedTable
的开发人员,但将此更改为
retain
将解决iOS 6中代码崩溃的问题

[编辑:
SDNestedTable
的作者同意我对该问题的评估,并报告该问题已在最新版本中修复。-Rob]


致以最良好的祝愿。

我不太清楚它在您的模拟器上是如何工作的(当我在我的模拟器上试用时,我得到了您原始问题中列出的崩溃)。无论如何,您可以通过查看以下项目来修复它:

  • 主要问题是捆绑包中不包括NIB。请将其添加到项目目标的“复制捆绑包资源”,例如:

  • 在查看“复制包资源”的同时,还需要包含