Почему массив в iOS 4.0 отображается как __NSArrayI (и как мне его сопоставить)? - PullRequest
2 голосов
/ 26 июня 2010

Объект, который раньше идентифицировал себя как NSCFArray под предыдущими iPhoneOS, теперь, кажется, идентифицирует себя как __NSArrayI на устройствах под управлением iOS 4.0.

Есть идеи, что с этим? Я не могу найти его ни в одной документации.

Кроме того, он не соответствует "[NSArray class]".

Это должен быть простой массив. Это определено так:

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, но не массивы, и я не могу понять, как сопоставить его.

1 Ответ

9 голосов
/ 28 июня 2010

Почему это выглядит так? Потому что мы не можем доверять внутренним именам классов от одного выпуска к другому.

Как это сопоставить? Не пытайтесь сопоставить название класса или эквивалентный класс. Просто используйте isKindOfClass: он будет сопоставлен с классом и его подклассами, и делает правильные вещи для странных вариантов, подобных этому.

Например:

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

Обратите внимание, что вы отправляете объекту isKindOfClass: сообщение, не в [класс объекта]!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...