添加委托协议后,应用程序在 main 中崩溃;没有错误代码

Posted

技术标签:

【中文标题】添加委托协议后,应用程序在 main 中崩溃;没有错误代码【英文标题】:App crashes in main after adding delegate protocol; no error code 【发布时间】:2012-07-05 00:56:51 【问题描述】:

在我的应用程序中,可以将一个视图中的图表拖到第二个视图中,以便新的图表替换第二个视图(例如具有拖放功能的复制/粘贴效果)。如果委托协议被取出,则应用程序可以工作,以便第二个视图处理函数本身的更改。添加协议后,应用程序在主文件中崩溃

return UIApplicationMain(argc, argv, nil, NSStringFromClass([Load_CreatorAppDelegate class]));.

除了标准 (lldb) 之外没有任何错误输出。即使我取消对委托的调用(保留在代码中),应用程序也会崩溃。不过,我知道它必须与协议代码相关,因为在此之前它运行良好。

这是第二个视图(BeamView)的部分代码:

[self drawSupportsAtLeftPoint:self.beamBottomLeft rightPoint:self.beamBottomRight inContext:context :leftPin :rightPin];   

BOOL pt = NO;
if (self.tempLoad) 
    //self.loadGraph = [self.dataSource changeToTempLoad:self]; NOTE #1
    //if (self.tempPtLoad.x != 0 || self.tempPtLoad.y != 0) pt = YES;
    pt = [self changeLoad];
    [self drawLoadWithFunction:self.loadGraph inContext:context fromPoint:self.beamTopLeft toPoint:self.beamTopRight withAlpha:0.3 isPointLoad:pt inBlack:YES];

else 
    self.loadGraph = ^(int x) return x/15;;
    [self drawLoadWithFunction:self.loadGraph inContext:context fromPoint:self.beamTopLeft toPoint:self.beamTopRight withAlpha:1 isPointLoad:pt inBlack:NO];


self.tempLoad = NO;

注意 #1:这些被注释掉的行是调用委托的行。这两种方法及其实现是我所做的唯一更改。

我完全困惑,任何帮助将不胜感激。应用在主文件中崩溃的可能原因有哪些?

【问题讨论】:

由于 4.x 系列版本中引入的 Xcode 中的错误功能,崩溃将该行标记为错误。基本上,默认情况下,未捕获的异常在到达应用程序的顶层之前不会报告,然后不会报告异常堆栈跟踪。有时它有助于转到断点检查器并在未捕获的 Objective-C 异常上添加中断;更常见的是,它有助于将您在 @try/@catch 中指示的“main”中的行换行,然后 NSLog 异常的描述和 callStackSymbols。 谢谢,@PhillipMills -- 我做了以下@try @autoreleasepool return UIApplicationMain(argc, argv, nil, NSStringFromClass([Load_CreatorAppDelegate class])); @catch (NSException *exception) NSLog(@"Exception: %@", exception); [NSThread callStackSymbols]; 这是你的意思吗?程序仍然在主线崩溃,没有输出任何东西 关闭。我会选择@try @autoreleasepool return UIApplicationMain(argc, argv, nil, NSStringFromClass([Load_CreatorAppDelegate class])); @catch (NSException *exception) NSLog(@"Exception: %@, Stack: %@", [exception description], [exception callStackSymbols]);,但如果它没有触发你的,我认为我没有理由继续努力。另一种选择是将@try/@catch 移动到您认为正在生成实际错误的位置。 =/ 好的——非常感谢您的帮助!我会坚持下去的。 【参考方案1】:

好的!我觉得有点愚蠢,但事实证明,崩溃与委托没有任何关系(嗯,有点)。我删除了 ViewController.m 文件中的插座,而没有在 IB 中断开它们,这导致了崩溃。

我忘记了我已经这样做了,所以我花了一段时间才想到它 - 直到我回到旧的保存版本,我才看到了不同之处。

【讨论】:

以上是关于添加委托协议后,应用程序在 main 中崩溃;没有错误代码的主要内容,如果未能解决你的问题,请参考以下文章

单击 SaveTask 按钮后,未添加到 Main Activity 中的任务显示。并且应用程序正在崩溃。请检查布局管理器是不是正确设置

如何将应用程序委托添加回 mainwindow.xib

NSKeyedUnArchiver 崩溃

找不到协议声明自定义协议委托 iphone

未实现委托方法导致崩溃

应用程序委托中的 NSUnknownKeyException 错误