2012-10-03 17 views
0

我有一個初始化的一類,需要一個的NSDictionary:孤男寡女來強制轉換

-(id)initWithVector:(NSDictionary *) vectorDictionary; 

當我試圖通過它的NSDictionary,它給我的錯誤:

Incompatible point types sending'VectorClass * _strong' to parameter type 'NSDictionary *'

代碼:

// myVectorList is an array of dictionaries 
for (NSDictionary *vector in self.myFielder.myVectorList) 
{ 
    if ([vector isKindOfClass:[NSDictionary class]]) 
    { 
     // hardcoded for testing purposes 
     if ([[vector objectForKey:HANDLE] isEqualToString:@"pt07p48u17aj75qx8n2fri9jlkrc262yt8"]) 
     { 
      // GET THE WARNING ON PASSING "VECTOR" 
      VectorClass *vector = [[VectorClass alloc] initWithVector:vector]; 

      [vector retrieveVectorAttributeTable]; 
      [vector retrieveVectorMetadataTable]; 
     } 
    } 
} 

if if typecast(NSDictionary *)vector,no warning。

vector應該是一本字典,那麼爲什麼我會收到警告?

+2

有趣的你怎麼認爲這是一個很好用的主意兩個完全不同的變量名稱非常相同。 – Till

回答

7

對兩個不同的變量使用相同的名稱。最內部變量是在同一條直線定義VectorClass類型,因此編譯器試圖將它傳遞給init方法,相反,更改其名稱:

VectorClass *vectorC = [[VectorClass alloc] initWithVector:vector]; 
[vectorC retrieveVectorAttributeTable]; 
[vectorC retrieveVectorMetadataTable]; 
+0

哦gawd!現在我覺得很愚蠢。感謝您指出了這一點。 – Padin215

+2

你不應該爲此而感到愚蠢。大多數程序員在這個階段或其他階段都會犯這個錯誤。正如@Till所評論的,你應該避免使用相同的變量名稱,這會讓人困惑(對於其他程序員和你自己)並且是危險的(它可能以錯誤行爲而不是編譯時錯誤結束)。 – MByD

相關問題