关于objective C:缺少方法签名会导致应用程序中止吗?

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    ----------------|
- (void)checkForDatabase  {

    NSFileManager *filemanager = [NSFileManager defaultManager];
    NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
            stringByAppendingString:@"/ppcipher.s3db"];

    if(![filemanager fileExistsAtPath:databasePath]) {  //Database doesn't exist yet, so we create it...
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/ppcipher.s3db"];
        // remainder of code goes here...
    }
}

正如你提到的,你需要在你的接口中声明函数,否则动态(即:运行时)绑定不会知道该方法存在。


您要么需要在头文件中声明 checkForDatabase,要么在实现文件中的私有类别中声明。您还可以在 applicationDidFinishLaunching.

的实现之上定义方法实现


在类的接口中声明 -checkForDatabase 方法是个好主意,但我认为这不是导致崩溃的原因。查看控制台中可能指示崩溃原因的消息。