2010-03-15 104 views
0

爲什麼這個代碼...兼容的指針類型傳遞參數1:

NSDictionary *testDictionary = [NSDictionary dictionaryWithObjectsAndKeys:kABOtherLabel, @"other", kABWorkLabel, @"work", nil]; 
// There are 9 more key-value pairs that i've omitted here.

拋出這樣的警告:
warning: passing argument 1 of 'dictionaryWithObjectsAndKeys' from incompatible pointer type

順便說一下,代碼工作正常,但我不喜歡留下警告。我認爲它不喜歡我在字典中存儲常量。那麼,我可以在哪裏存儲它呢?我應該在每個常量之前放置(void *)嗎?

回答

2

在iPhone上沿,kABOtherLabelCFStringRef而不是NSString *。然而,這兩個都是免費電話橋接,所以你可以將它轉換爲NSString *

NSDictionary *testDictionary = [NSDictionary dictionaryWithObjectsAndKeys:(NSString *)kABOtherLabel, @"other", (NSString *)kABWorkLabel, @"work", nil]; 

(另外,你可以有你的關鍵字和值在此調用逆轉,除非你想讓你的文字字符串是鍵(對象先來))。

+0

+1謝謝。好計劃。我注意到,我只接受警告,因爲它涉及到第一個對象。輸入其他對象似乎並不必要(至少與警告有關)。我希望我的字符串是關鍵。我花了一分鐘才發現事物的順序。 – Andrew 2010-03-16 18:09:06

1

我認爲kABOtherLabel是一個不是一個對象的常量整數。如果你想將其添加爲一個對象使用什麼用的[NSNumber numberWithInteger:kABOtherLabel]線(同樣適用於第二個值對象)

+0

我明白了,所以它想要一個對象。那麼,如果你打印'kABOtherLabel',你會得到'_ $的值! !$ _'所以我不認爲它是一個整數,它是一個'CFTypeRef'。但聽起來你是對的,它不是一個對象,這就是'NSDictionary'正在尋找的東西。我想知道正確的方法是存儲一個String> Constant對的列表嗎? – Andrew 2010-03-15 07:29:33

+1

關於您可以使用%d佔位符打印的打印,它將顯示該常數的整數表示形式。除此之外 - 你可以在old-school結構中存儲字符串>常量對。 – Eimantas 2010-03-15 07:32:24

+0

+1哦,我喜歡那樣。也許我會創建一個字符串>整數對的字典。 – Andrew 2010-03-15 07:42:46