2013-04-17 41 views
0

我想將我的項目從Android移植到iOS,並且遇到一些令人煩惱的基本問題。就像目前的例子,我不能調用我創建的方法,因爲它似乎並不存在,因爲它在那裏是令人困惑的。iOS Objective C方法問題

我不知道我在做什麼錯。我曾試着看過關於這個主題和其他問題的書籍,但找不到解釋我做錯什麼的任何內容。據我所知,我做對了。

我得到以下警告:

實例方法 '-CheckIfTableExists:withDB' 未找到(返回類型默認爲 '編號')

接收機類型 'INT' 不是' d'或接口指針,考慮將其轉換爲'id'

我收集第二個警告是因爲編譯器認爲它通過將返回值更改爲'id'而不是'int'來幫助我,所以變量I am試圖把價值放入是錯誤的匹配。然而,我不明白爲什麼它將返回類型從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 

回答

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/

+0

應當'TableDBExists = [自CheckIfTableExists:Database_Table withDB:分貝];'。你忘了「自我」。 – rmaddy

+0

糟糕,對不起@maddy :) –

+0

是的,對不起,我錯過了我的代碼中導入DatabaseHelper.h文件的那一行,但它在那裏。我也有在DatabaseHelper.h文件中聲明的CHeckIfTableExists方法,所以我應該能夠根據需要在程序的其餘部分在類的外部引用它。謝謝你轉變爲自我的建議,就像魅力一樣。 – Daisy

0

TableDBExistsInitialize中是int類型的,你不能發送消息給它。
改變將消息發送給self
TableDBExists = [self CheckIfTableExists:Database_Table withDB:db];