Receiver 'ClassName' - это класс переадресации, и соответствующий @interface может не существовать

В настоящее время я пытаюсь найти UIPickerTable в UIPickerView.subviews... поэтому я прохожу через цикл и выполняю isKindOfClass:[UIPickerTable class].... который работает.. но поскольку заголовок UIPickerTable не отображается, я получаю предупреждая, что "приемник" UIPickerTable "является классом вперед и соответствующий @interface может не существовать"

Чтобы даже скомпилировать, я делаю @class UIPickerTable, и, очевидно, он хочет, чтобы я включил его.

Мне интересно, есть ли способ обойти это предупреждение.

ТИА!

Ответы

Ответ 1

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

@interface FacesViewController : NSObject {
}

Я полагаю, что, если ваше приложение зависит от внутренней структуры класса UIKit, вероятно, не самая лучшая стратегия. Предположительно, у вас есть веская причина для того, чтобы обманывать внутри UIPicker...

Ответ 2

Возможно, у вас есть @class UIPickerTable в вашем .h файле, и у вас не было #import UIPickerTable.h в файле {RootViewController}.m

Ответ 3

Импортирование класса vs с помощью директивы @class решит это предупреждение. Помните, что @class не сообщает компилятору, что такое "подписи" методов/классов, вместо этого он просто говорит, что класс существует, поэтому не выходите из строя. При вступлении в детали используйте вместо этого импорт "...", поэтому он включает в себя заголовок/интерфейс для класса.

Ответ 4

Использование частных API-интерфейсов в приложении iPhone является основанием для отказа от AppStore (функция отслеживания близости Google не выдерживает). Если вы не планируете использовать программное обеспечение самостоятельно, не используйте частные API. Если вы не можете делать то, что хотите, не прибегая к частным API, сообщите об ошибке на веб-сайте радар.

Ответ 5

Возможно, я совсем не понимаю смысла здесь, но я столкнулся с чем-то похожим с AddressBook. Я включил структуру AddressBook так, чтобы

#import <AddressBook/ABAddressBook.h>

Но когда я хотел проверить класс выбранной записи в peoplePickerView..

NSArray *selected = [peoplePickerView selectedRecords];
for(id record in selected)
{
if([record isKindOfClass:[ABPerson class]])
{
    return [record valueForKey:@"identityUniqueId"];
}

}

... Я получил предупреждение, что "приемник" ABPerson "является классом вперед, а соответствующий @interface может не существовать". Тем не менее, это оказалось легко исправлено путем настройки файла заголовка:

#import <AddressBook/ABAddressBook.h>
#import <AddressBook/ABPerson.h>
@class ABPerson;

Ответ 6

Такое происходит, когда правильные заголовки не импортируются где-то. Например, при попытке установить NSManagedObjectContext вы можете получить это, не импортируя #import <CoreData/CoreData.h>