2012-01-25 88 views
1

所以,有一個很難解引用一些數據我已經裝入數組和字典:訪問字典的陣列在Objective-C

內的控制器:

- (void)setupVendorsArray { 
    self.vendorsArray = [NSArray arrayWithObjects:@"Toyota", @"Honda",nil]; 
} 

- (void)setupProductFamiliesHash { 

    NSArray *lowcost = [NSArray arrayWithObjects:@"Corolla", @"Fit",nil]; 
    NSArray *midrange = [NSArray arrayWithObjects:@"Camry", @"Accord",nil]; 
    NSArray *highend = [NSArray arrayWithObjects:@"Lexus", @"Acura",nil]; 
    NSArray *trucks = [NSArray arrayWithObjects:@"Tacoma", @"Ridgeline",nil]; 

    NSDictionary *lc = [NSDictionary dictionaryWithObjects:lowcost forKeys:self.vendorsArray]; 
    NSDictionary *mr = [NSDictionary dictionaryWithObjects:midrange forKeys:self.vendorsArray]; 
    NSDictionary *he = [NSDictionary dictionaryWithObjects:highend forKeys:self.vendorsArray]; 
    NSDictionary *tk = [NSDictionary dictionaryWithObjects:trucks forKeys:self.vendorsArray]; 

    self.productFamiliesHash = [NSArray arrayWithObjects:lc,mr,he,tk,nil]; 
} 

在gdb中打印對象結果在本作productFamiliesHash:

(gdb) print-object self.productFamiliesHash 
<__NSArrayI 0x6b2c760>(
{ 
    Toyota = "Corolla"; 
    Honda = "Fit"; 
}, 
{ 
    Toyota = "Camry"; 
    Honda = "Accord"; 
}, 
{ 
    Toyota = "Lexus"; 
    Honda = "Acura"; 
}, 
{ 
    Toyota = "Tacoma"; 
    Honda = "Ridgeline"; 
} 
) 

但是,對我的生活中,我似乎無法訪問,例如,豐田花冠,我期望我能在gdb這樣做:

(gdb) p [[productFamiliesHash objectAtIndex:0] objectForKey:@"Toyota"] 

然而,GDB給出:

Unable to call function "objc_msgSend" at 0x156408c: no return type information available. 

如何提領我在陣列內的字典?

+1

你是不是正確的。在gdb控制檯中嘗試'po'而不是'p'。 'po'打印出ObjC對象。 –

+0

當對象確實是一個數組時,您應該避免使用名稱'productFamiliesHash'。 – ThomasW

回答

4

嘗試使用po而不是p。對於Objective-C方法,p要求你輸出結果:

(gdb) p (id) [[productFamiliesHash objectAtIndex:0] objectForKey:@"Toyota"] 

即使那樣,你也不會得到對象的描述,只有指針值。

+0

太棒了。謝謝@iccir。奇蹟般有效! (使用寶) – Sly

1

改爲使用po(打印對象)。另一個重要的事情是,GDB需要知道對象的確切類型之前,它可以直接發送郵件,那麼你只需要正確投它:

po [(NSDictionary *)[productFamiliesHash objectAtIndex:0] objectForKey:@"Toyota"] 
+0

其實,在這種情況下,你不需要施放它。 iccir的方式工作正常。 – ThomasW

+0

就此而言,如果您沒有投射並向(ID)發送訊息,它可能會在代碼中產生警告? –

+0

感謝@Costique的快速回復。我給了這個iccir,只是因爲他是第一個... – Sly