Слово #selector может вызывать только методы, отмеченные @objc. Если вы удалите этот метод или спецификатор @objc, #selector не сможет вызвать его. Вот почему вы получаете сообщение об ошибке.
Если вы хотите, чтобы уведомление, наблюдаемое в классе A, выполняло код в классе B, я вижу несколько вариантов:
1.) Создайте экземпляркласса B внутри класса A, а код в setDataIcon внутри метода класса A вызывает функцию из вашего экземпляра класса B.
2.) В setDataIcon отправьте уведомление, наблюдаемое классом B, изатем зарегистрируйте класс B, чтобы наблюдать это уведомление, и попросите класс B выполнить код при соблюдении.
3.) Используйте методы делегата. Прежде чем регистрироваться для наблюдения за уведомлением, убедитесь, что вы создаете экземпляр класса B и назначаете его делегату класса A. Затем внутри setDataIcon делегат (который является классом B) вызывает метод делегата.
Если посмотреть на ваши комментарии, если 'global' является экземпляром класса B внутри класса A, метод setDataIcon внутри global также должен быть квалифицирован как @objc. (вариант 1)