2012-10-06 61 views
0

我有一個cocos2d遊戲設置,它使用與此相似的基本繼承設置;使用isKindOfClass輸出數組中的對象的子項?

> Property (Base class) 
> - Office : Property 
> - Warehouse : Property 
> - Bank : Property 

所有屬性住在一個陣列listOfProperties,我試圖打印出每個屬性的的NSLog,但我不知道該怎麼做。

例如,

// Create an office 
Office *o = [Office alloc] init]; 
[o setName:@"Some office"]; 
[city.listOfProperties addObject:o]; 
[o release]; 

// Debug output all the properties in the game 
// city.listOfProperties in an array of Property objects 
for (Property *prop in city.listOfProperties) { 

    // I want to print out all the different properties here 
    if ([prop isKindOfClass:[Office class]]==YES) 
    { 
     NSLog(@"Office"); 
     NSLog(@"office.name = %@", prop.name); // Prop name does not work 
    } 
} // next 

的問題是,一些屬性不共享相同的屬性。例如,辦公室可能有「樓層」,但倉庫有「能力」。

我需要的是打印出所有不同的屬性,但我不知道如何將指針prop的焦點更改爲特定類(即:Office)的指針。

我需要他們全部生活在listOfProperties,這樣我才能在CCMenu中使用它,並且希望避免將它們拆分成單獨的陣列,這對我來說很難管理。

有沒有辦法做到這一點?

謝謝

+0

注意。並非所有Property的子節點都有'name'。這僅用於說明目的。有些根本沒有名字 – zardon

回答

1

這樣做類型轉換。

for (Property *prop in city.listOfProperties) { 

if ([prop isKindOfClass:[Office class]]) 
{ 
    Office* officeObject = (Office*) prop; 

    NSLog(@"office.name = %@", officeObject.name); 
} 
if ([prop isKindOfClass:[Warehouse class]]) 
{ 
    Warehouse* WarehouseObject = (Warehouse*) prop; 

    NSLog(@"Warehouse.name = %@", WarehouseObject.name); 
} 
if ([prop isKindOfClass:[Bank class]]) 
{ 
    Bank* BankObject = (Bank*) prop; 

    NSLog(@"Bank.name = %@", BankObject.name); 
} 

}

你可以有你想要的任何記錄變量。例如使用名稱。

+0

感謝您的支持,此工作正常! – zardon