2011-04-27 47 views
0

我在下面的代碼中得到這個異常。我想這是因爲我沒有定義兩個傳入的參數類型。他們是本地的;所以我如何定義它們(以及在哪裏)。NSInvalidArgumentException ...如何正確定義參數?

Error: 2011-04-27 11:18:03.226 PointPeek[174:707] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[SQLiteDB addRecordToDatabase::]: unrecognized selector sent to class 0x1fe70'

這裏的代碼調用行:

[SQLiteDB addRecordToDatabase: symbol.data: symbol.typeName];

,這裏是我打電話的方法:

- (void) addRecordToDatabase:data: typeName { 

    NSString *insertCommand = [NSString stringWithFormat:@"INSERT INTO CardData (CARD_ID, CARD_NAME, CODE_VAL) VALUES ('/%@', '/%@', '/%@')", data, @"Test Card", typeName]; 
    if(sqlite3_open_v2(cDatabasePath, &db, SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK) { 


    } 

回答

1

Error: 2011-04-27 11:18:03.226 PointPeek[174:707] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[SQLiteDB addRecordToDatabase::]: unrecognized selector sent to class 0x1fe70'

基本上,「unrecognized selector sent to...」消息意味着你試圖告訴一個對象(或類)做一些事情,它不知道該怎麼辦。 (「選擇器」是方法的另一個名稱)。

您已定義的類SQLiteDB方法爲實例方法:

- (void) addRecordToDatabase:data: typeName; 

我們知道,因爲在方法名-(見Methods and MessagingClass Interface)。在出現的錯誤消息中,請注意它以+開頭,這意味着您試圖在SQLiteDB類本身上調用方法,而不是在該類的實例上。

換句話說,你試圖做到這一點:

[SQLiteDB addRecordToDatabase: symbol.data: symbol.typeName]; 

,當你需要做這樣的事情:

SQLiteDB *db = [[[SQLiteDB alloc] init] autorelease]; // an instance 
[db addRecordToDatabase: symbol.data: symbol.typeName]; 

(請注意,前兩行代碼是不是所有的它們本身是有用的。假定,不是在這個方法中創建一個SQLiteDB的實例,而是將它作爲一個實例變量)。

+0

啊......現在對我來說非常有意義......非常感謝你!我真的很感激它! :d – SpokaneDude 2011-04-27 20:23:32

1

[SQLiteDB addRecordToDatabase: symbol.data: symbol.typeName];

那會假設addRecordToDabase::是類方法,而不是實例方法。

此外,這是一個方法可怕的名字。嘗試是這樣的:

- (void)addRecordWithData:(NSData*)aData andType:(NSString*)aType; 

也就是說,裸:■要避免,你應該始終指定參數的類型(和你在這裏做回退到id)。

最後,爲什麼你不使用核心數據,或者至少是FMDB?原始SQLite是浪費時間。


很可能SQLite比Core Data更難編寫代碼。如果你對這兩者都是新手,核心數據是你的時間投資更好的回報。

在任何情況下,您評論中的問題都表明您確實需要從理解Objective-C開始。 Apple提供了一個excellent language guide

+0

所以我現在很困惑......什麼是「電話」(或消息)應該看起來像?而且,「和類型」是什麼? (有沒有一個文件,你可以指示我如何構建消息和方法?) 另外,我沒有使用CoreData,因爲我是一個新手,需要學習如何在Obj-C中編碼,需要知道FMite的工作原理以及我讀過的內容,FMDB不適用於XC4。我不想XC4(這是另一個故事)的麻煩現在...需要得到這個工作... – SpokaneDude 2011-04-27 19:48:27

+0

順便說一句:FMDB工作正常與Xcode 4. – bbum 2011-04-27 19:57:52

+0

我認爲你擊中了頭!我不太瞭解Obj-C那麼好......我對C#,C,C++非常熟悉,而且我正在一個人的時間讓我的思緒圍繞着Obj-C。學習CoreData和/或FMDB(同時閱讀)不會解決我不知道Obj-C的問題。與此同時,我有這個應用程序「鞭打」,並正在努力,如你所見。 謝謝你的幫助...我會繼續卡車'... D – SpokaneDude 2011-04-27 20:03:32