Does Missing method signature causes app abort?
这是错误信息:
警告:\\’ReaderAppDelegate\\’ 可能不会响应 \\’-checkForDatabase\\’
(没有匹配方法签名的消息将被假定返回 \\’id\\’ 并接受 \\’…\\’ 作为参数。
我在下面代码中的 \\’checkForDatabase\\’ 方法处设置了一个断点,但它从未到达那里……应用程序死了。我假设他上面的警告与中止有关。我该如何解决?我必须在我的 .h 文件中声明 \\’checkForDatabase\\’ 吗?
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//————— application finished launching —————-|
– (void)applicationDidFinishLaunching:(UIApplication *)application { // create the d/b or get the connection value [self checkForDatabase]; } //————– check for database or create it —————-| NSFileManager *filemanager = [NSFileManager defaultManager]; if(![filemanager fileExistsAtPath:databasePath]) { //Database doesn’t exist yet, so we create it… |
正如你提到的,你需要在你的接口中声明函数,否则动态(即:运行时)绑定不会知道该方法存在。
- 我将它添加到我的 .h 文件 (- (void)checkForDatabase; ),但现在应用程序死掉了……我看不到崩溃的位置; XCode 调试器不应该告诉你这些事情吗? (在 Monotouch 中确实如此!)
- @Spokane-Dude 如果您将断点放在 [self checkForDatabase]; 行,您应该能够单步执行该方法。也就是说,如果您已将 – (void)checkForDatabase; 添加到界面的正确部分(在变量定义块之外,在 @end 指令之前),那么听起来问题出在其他地方。
- 我注释掉了 [self checkForDatabase];它仍然死了……这是控制台输出:(最后两行重复自己) ttys001 程序已加载。 target remote-mobile /tmp/.XcodeGDBRemote-949-102 切换到 remote-macosx 协议 mem 0x1000 0x3fffffff 缓存 mem 0x40000000 0xffffffff none mem 0x00000000 0x0fff none (gdb) run Running… 启动远程程序时出错:无法获取进程 245 的任务. 被调试的程序没有运行。
- @Spokane-Dude 认为您需要阅读 stackoverflow.com/questions/4720597/… :-)
- 我正在使用开发配置文件;在我添加代码以检查数据库之前,这是可行的。即使我将所有数据库代码注释掉,它仍然无法运行……
- @Spokane-Dude 奇怪。在那种情况下,我没有想法。 (假设您尝试过从设备上删除应用程序,在 Xcode 中进行清理和重建,重新启动 Mac 等?)
- 我找到了…我已经重命名了一些文件,并没有重命名 IB 中的文件…非常感谢您的时间…我真的很感激。
- @Spokane-Dude 不用担心 – 很高兴你能把它整理好。 :-)
您要么需要在头文件中声明 checkForDatabase,要么在实现文件中的私有类别中声明。您还可以在 applicationDidFinishLaunching.
的实现之上定义方法实现
在类的接口中声明 -checkForDatabase 方法是个好主意,但我认为这不是导致崩溃的原因。查看控制台中可能指示崩溃原因的消息。
- 我想你可能会感到惊讶。 :-)
- 感谢您的指点…不知道它存在…无论如何,这是内容正在运行…启动远程程序时出错:无法获取进程177的任务。启动远程程序时出错:无法获取进程的任务177. 被调试的程序没有运行。正在调试的程序没有运行。
- @middaparka:您可以向 Objective-C 中的任何对象发送任何消息。现在,如果接收者没有实现该消息,默认行为是抛出异常,如果您没有捕获异常,应用程序将终止。但是简单地没有声明一个你调用的方法不会导致崩溃(只要你定义了它)。
- @Spokane-Dude:您的应用显然还有其他问题。我首先验证应用程序委托是否已正确连接。在 main() 中放置一个断点,看看你是否到达那里。检查是否正确指定了主 nib 文件。您是否对构建设置进行了任何更改?如果将源代码复制到新项目中会发生什么?
来源:https://www.codenong.com/5225260/