[отредактировано] Я отредактировал вопрос, чтобы изолировать проблему и помочь другим людям лучше.dyld: Symbol not found problem (NSMutableAttributedString, похоже, сильно связан)
Я использую NSMutableAttributedString
класс в мое приложение, которое доступно в прошивкой 3.2 и более поздних версий. Однако я также нацелен на устройства с версией 3.1.2; для обратной совместимости, я использовал следующий код:
CFAttributedStringRef attributedString;
if (NSClassFromString(@"NSMutableAttributedString")) {
attributedString = (CFAttributedStringRef)[[[NSMutableAttributedString alloc]
/* init... to initialize an object */ ] autorelease];
} else {
attributedString = CFAttributedStringCreate(kCFAllocatorDefault,
(CFStringRef)NSLocalizedString(@"MessageInEllipse",
@"Message to show in an ellipse"),
(CFDictionaryRef)attributes);
}
}
В строке 3, я непосредственно использовать имя класса NSMutableAttributedString
, но я ожидал, что это будет слабо линковкой, так это просто означает, nil
здесь и приложение будет работать без проблем.
Однако при запуске приложения на устройствах 3.1.2 оно запускается, жалуясь, что не может найти символ NSMutableAttributedString
. Кажется, что этот символ класса сильно связан. Почему это произойдет?
На самом деле, я считаю, что нецелесообразно полагаться на слабое соединение с фреймами (чтобы слабо связать символ класса), когда сама инфраструктура доступна для цели развертывания, и только класс отсутствует. Я отправил ответ, чтобы описать, что я нашел в эти дни. Однако вы направили меня в правильном направлении, и я ценю это! – MHC