Mac OS X 10.7.3 добавляет - метод [NSDictionary stringForKey:]? - PullRequest
0 голосов
/ 11 февраля 2012

Я получил подтвержденные мной сообщения о том, что одна из функций одного из моих приложений выходит за рамки 10.7.3. По результатам расследования выяснилось, что 10.7.3 ввел приватный метод -stringForKey: для NSDictionary.

[NSDictionary respondsToSelector:@selector(stringForKey:)] возвращает НЕТ, как и следовало ожидать.

Но у меня есть метод категории на NSDictionary для реализации метода -stringForKey:, как показано ниже (поэтому его можно использовать и для значений NSNumber и NSDate). В 10.7.2 и более ранних версиях она работает нормально; в соответствии с 10.7.3 возвращается ноль. Получение объекта и описания напрямую работает нормально. Так что это должен быть конфликт категории.

- (NSString *)stringForKey:(id)key;
{
    return [[self objectForKey:key] description];
}

Я полагаю, что это еще один аргумент в пользу префикса методов категории, несмотря на совет, который я получил от евангелиста Apple Application Frameworks .

Могут ли другие это подтвердить? Я не думаю, что это стороннее приложение конфликтует; Я думаю, что это изменение в 10.7.3.

1 Ответ

2 голосов
/ 11 февраля 2012

Вы должны всегда использовать методы префиксов категорий, которые вы создаете для классов инфраструктуры.Нет вопросов об этом.Неважно, ввел ли этот метод 10.7.3 или нет, тот факт, что вы объявляете его без префикса, неверен.

Кстати, тестирование [NSDictionary respondsToSelector:@selector(stringForKey:)] не обязательно будет работать.NSDictionary - это кластер классов, поэтому вы просто запрашиваете абстрактный суперкласс, тогда как закрытые методы могут существовать только в конкретных подклассах.

...