Получение представления NSViewController, если это пользовательский класс?


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

CollectionItemView *myView = [self view]; 

Это работает довольно хорошо, но я получаю предупреждение Incompatible pointer types initializing CollectionItemView __strong with an expression of type NSView. Я понимаю, почему я получаю это, но это нормально, чтобы игнорировать его или я должен перезаписать свойство view ?

Чак

2 5

2 ответа:

Если вы уверены, что [self view] является CollectionItemView просто сделайте:

CollectionItemView *myView = (CollectionItemView*)[self view];

Или (что лучше) вы можете использовать:

id myView = [self view];

Нет необходимости переписывать его. Трули уже предложил два рабочих решения. Однако, просто чтобы сохранить, я бы предпочел кодировать его по-другому.

CollectionItemView *myView = nil;
if ([[self view] isKindOfClass:[CollectionItemView class])
  self.view = (CollectionItemView*)[self view];

Более короткая версия без теста isKindOfClass подходит, если вы точно знаете из контекста, что объект должен иметь тип CollectionItemView или любой из его подклассов.