2010-06-25 36 views
2

在以前的iPhoneOS中,一個用於標識自身爲NSCFArray的對象現在似乎在運行iOS 4.0的設備下將自身標識爲__NSArrayI。爲什麼iOS 4.0中的數組顯示爲__NSArrayI(以及如何匹配它)?

不知道這是怎麼回事?我無法在任何文檔中找到它。

此外,它不匹配「[NSArray類]」。

它應該是一個簡單的數組。它的定義是這樣的:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         thisPlayerName,@"name", 
         [NSNumber numberWithInt:[myTable.visiblePlayer.number intValue]],@"number", 
         playerCountArray,@"players", 
         [NSArray arrayWithObjects:@"easy",@"medium",@"hard",nil],@"opponent difficulty", 
         [NSNumber numberWithBool:[cardDecks getOptionBoolForKey:@"seeMoney"]],@"see money", 
         [cardDecks gameSpeedOptions],@"computer turn speed", 
         [NSArray arrayWithObjects:@"aqua",@"green",@"orange",@"purple",@"red",nil],@"player color", 
         nil]; 

然後送入另一個字典是這樣的:

myRecord = [[NSMutableDictionary alloc] initWithCapacity:5]; 
    [myRecord addEntriesFromDictionary:newDictionary]; 

對一切都感到類,如我期望:NSCFString,NSCFNumber,NSCFBoolean,但不是陣列和I無法弄清楚如何匹配它。

+0

[NSArray類]無論如何不會返回NSCFArray。它應該只是返回NSArray。你是否因爲在數組實例中調用類而得到__NSArrayI? – Jasarien 2010-06-26 00:02:36

回答

9

爲什麼它看起來像這樣?因爲我們不能相信從一個版本到另一個版本的類的內部名稱。

如何搭配?不要嘗試匹配課程名稱或使課程對等。只需使用isKindOfClass:它將匹配一個類及其子類,併爲像這樣的奇怪變體做正確的事情。

例如:

} else if ([thisValue isKindOfClass:[NSArray class]]) { 

請注意,您所發送的isKindOfClass:消息對象,爲[對象類別]!

相關問題