添加委托协议后,应用程序在 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 中的任务显示。并且应用程序正在崩溃。请检查布局管理器是不是正确设置