【问题标题】:iOS Objective C Method issueiOS 目标 C 方法问题
【发布时间】:2013-04-17 04:39:33
【问题描述】:

我正在尝试将我的一个项目从 Android 移植到 iOS,但我遇到了一些一直令人烦恼的基本问题。就像目前一样,我无法调用我创建的方法,因为它似乎不存在,这令人困惑,因为它就在那里。

我不确定我做错了什么。我已经尝试查看一些关于该主题的书籍以及有关该主题的其他问题,但找不到任何可以解释我做错了什么的东西。据我所知,我做得对。

我收到以下警告:

找不到实例方法'-CheckIfTableExists:withDB'(返回类型默认为'id')

接收器类型'int'不是'd'或接口指针,考虑将其转换为'id'

我收集到第二个警告是因为编译器认为它通过将我的返回值更改为“id”而不是“int”来提供帮助,所以我试图将值放入的变量不匹配。但是我不明白为什么它将返回类型从 int 更改为 id 开头,如果返回变量被弄乱了,那么编译器找到了该方法,为什么它说它找不到该方法?

有人可以帮忙吗?下面是有问题的代码。

#import "sqlite3.h"

@implementation DatabaseHelper

sqlite3 *db;

NSString *Database_Name = @"UniversalAVDatabase.db";
int Database_Version = 14;

NSString *Database_Table = @"Database";

NSString *Attribute_DB_Version = @"Database_Version";

- (NSString *)filePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    return [documentsDir stringByAppendingPathComponent:Database_Name];
}

- (int) CheckIfTableExists:(NSString *) TableName withDB:(sqlite3 *) db
{
    NSString *dbQuery = [NSString stringWithFormat:@"SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name = '%@';", TableName];
    sqlite3_stmt *SQLStatement;
    int Result = sqlite3_prepare_v2(db, [dbQuery UTF8String], -1, &SQLStatement, nil);
    return Result;
}

- (void) Initialize
{
    int CurrentDatabaseVersion = 1;
    //attempt to open the database.
    int Result = sqlite3_open([[self filePath] UTF8String], &db);
    if (Result == SQLITE_OK)
    {
        //Check if the Database table exists
        int TableDBExists = 1;
        [TableDBExists CheckIfTableExists:Database_Table withDB:db]; //I get two warnings from this
        if (TableDBExists == 1)
        {
            //If it exists check the version of the database to see if it is a later version.
            //CurrentDatabaseVersion = dbHelper.GetDatabaseVersion(db);
        }
        if (CurrentDatabaseVersion < Database_Version)
        {
            //UpgradeDatabase();
        }
    }
    else
    {
        //If the database does not exist then create it.
    }
}

@end

【问题讨论】:

    标签: ios methods call declare


    【解决方案1】:
    [TableDBExists CheckIfTableExists:Database_Table withDB:db]; 
    

    应该是:

    TableDBExists = [self CheckIfTableExists:Database_Table withDB:db]; 
    

    你需要为你的班级包含 .h 文件:

    #include "DatabaseHelper.h"
    

    我假设您在 DatabaseHelper.h 文件中声明了遇到错误的方法:

    - (int) CheckIfTableExists:(NSString *) TableName withDB:(sqlite3 *) db;
    

    我看到的还有很多其他的东西告诉我你来自不同的语言。请参阅:https://github.com/github/objective-c-conventionshttp://blog.gomiso.com/2011/08/15/objective-c-conventions/

    【讨论】:

    • 应该是TableDBExists = [self CheckIfTableExists:Database_Table withDB:db];。你忘了self
    • 是的,抱歉,我错过了代码中导入 DatabaseHelper.h 文件的那一行,但它就在那里。我还在 DatabaseHelper.h 文件中声明了 CCheckIfTableExists 方法,因此我应该能够根据需要在程序其余部分的类之外引用它。谢谢你关于切换到自我工作的建议。
    【解决方案2】:

    TableDBExistsInitialize 中是 int 类型,您不能向它发送消息。
    将其更改为向 self 发送消息:
    TableDBExists = [self CheckIfTableExists:Database_Table withDB:db];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2012-12-09
      • 2017-05-13
      相关资源
      最近更新 更多