2011-10-14 78 views
1

我試圖將它的內容分配給新的變量/對象時使用NSDictionary獲取錯誤。也許這不是可行的?我認爲這將是。我也不確定是否可以在字典中使用非Objective C特​​定對象。你可以嗎?存儲/從NSDictionary提取對象

NSDictionary *preProcessResult = [[NSDictionary alloc] initWithDictionary: [self preProcessing:testImage]]; 
IplImage* resultImage = [preProcessResult objectForKey:@"ResultImage"]; 
int numChars = [preProcessResult objectForKey:@"NumberChars"]; 
[preProcessResult release]; 

這裏是方法,我打電話來創建字典:

- (NSDictionary*) preProcessing: (IplImage*) testImage { 

//do stuff to image 

NSDictionary *testImage_andNumChars = [NSDictionary dictionaryWithObjectsAndKeys:resultImage, 
@"ResultImage", numChars, @"NumberChars", nil]; 

return testImage_andNumChars; 
} 

這是不正確的操作方法是什麼?當我創建了字典我得到的錯誤是:

「無法將‘的IplImage *’到‘objc_object *’的參數傳遞」

,當我檢索字典元素,我得到:

「無法在初始化中將'objc_object *'轉換爲'IplImage *'以及將'objc_object *'無效轉換爲'int'「。

我已經閱讀了NSDictionary上的Apple文檔,它讓我瞭解了這一點,但我不確定該從哪裏去。

在此先感謝。

+0

我剛剛閱讀了如何處理int問題。將其設置爲一個NSNumber對象,[NSNumber numberWithInt:numChars]。儘管如此,仍然不確定。 –

回答

2

不久之後,NSDictionary的值必須是NSObject s。

您使用如應該存儲intNSNumber

[NSNumber numberWithInt:numChars] 

當檢索值時,您可以使用如:

int numChars = [[preProcessResult objectForKey:@"NumberChars"] intValue]; 
0

你也可以不爲整數添加到字典 - 它需要一個東西。所以將你的整數包裝在一個NSNumber中,你應該沒問題。

+0

這個演員什麼也沒做。 Objective-C不需要從'id'類型轉換爲其他對象類型。 – jlehr

+0

非常感謝。所以當我創建字典的時候,還是可以的(就IplImage部分而言)? –

+0

hmmmm @jlehr是對的。 IplImage部分仍然存在相同的錯誤。還有其他建議嗎? –

0

IplImage是一個嚴格和numchars是int。因爲既不是客觀的c對象,也不能將它們存儲在字典中。您需要創建一個代表它們的對象。在numchars的情況下,你應該存儲一個NSNumber對象。爲了返回值,你可以在你從objectForKey返回的NSNumber上調用intValue。

對於IplImage它有點複雜。你可以把它包裝在自己的類中,或者你可以擴展NSValue。

最重要的是該字典只能存儲客觀的c對象。