0

私のプロジェクトを Android から iOS に移植しようとしていますが、厄介な根本的な問題に直面しています。たとえば、現在のように、作成したメソッドが存在しないように見えるため、呼び出すことができません。これは、すぐそこにあるため混乱します。

何が間違っているのかわかりません。この件に関する私が持っているいくつかの本と、この件に関する他の質問を見てみましたが、私が間違っていることを説明するものは何も見つかりません. 私が言うことができる限り、私はそれを正しくやった。

次の警告が表示されます。

インスタンス メソッド '-CheckIfTableExists:withDB' が見つかりません (戻り型のデフォルトは 'id' です)

レシーバーの型 'int' は 'd' またはインターフェイス ポインターではありません。'id' にキャストすることを検討してください

2番目の警告は、戻り値を「int」ではなく「id」に変更することでコンパイラが助けていると考えているため、値を配置しようとしている変数が一致していないことがわかります。ただし、戻り値の型を 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
4

2 に答える 2

0

TableDBExistsは int 型Initializeなので、それにメッセージを送信することはできません。
にメッセージを送信するように変更しますself:
TableDBExists = [self CheckIfTableExists:Database_Table withDB:db];

于 2013-04-17T04:46:31.877 に答える