у меня другая проблема с предупреждением "может не отвечать"? - PullRequest
0 голосов
/ 07 ноября 2010

ОК, я получил кодовый знак (оказывается, вам больше не нужно видеть кодовый знак и внедренное.mobileprovision в журнале сборки!), Но я хочу избавиться от моих предупреждений «возможно, не отвечает». Я не могу найти проблему после просмотра всех других сообщений об этих предупреждениях ...

В Welcome_backView.h:

 @interface Welcome_backView : UIView {
Welcome_backViewController *refParentViewController;

}


- (id)initWithParentViewController:(Welcome_backViewController *)parent;
- (void)setSubviewsToLandscape;
- (void)setSubviewsToPortrait;

В Welcome_back.m,

  #import "Welcome_backView.h"
  #import "Welcome_backViewController.h"
  @interface Welcome_backView()
//

@end

@implementation Welcome_backView



 - (void)setSubviewsToPortrait{
//do great things
 }

 - (void)setSubviewsToLandscape{
    //do more great things
 }

Тогда это из Welcome_backViewController.m:

#import "Welcome_backViewController.h"
#import "Welcome_backView.h"

@interface Welcome_backViewController()
-(void) arrangeViews;
@end

@implementation Welcome_backViewController

UIView *welcome_backView;

 - (id)init {

welcome_backView = [[Welcome_backView alloc] initWithParentViewController:self];
    self.view = welcome_backView;
}

-(void) arrangeViews {
//if one thing
    [welcome_backView setSubviewsToPortrait];
//if another thing
    [welcome_backView setSubviewsToLandscape];
}

И, как и многие другие постеры, я получаю предупреждения, что «UIView» может не отвечать на «-setSubviewsToLandscape» (и на портрет… то же предупреждение). Я перепробовал все обычные подозрения - орфографические ошибки метода, используя класс вместо экземпляра, не импортируя заголовок или забыв поместить объявления метода в заголовок.

На самом деле код работает нормально ...

Кто-нибудь может увидеть, что я сделал неправильно (можно ли избавиться от предупреждений)?

1 Ответ

0 голосов
/ 09 ноября 2010

В предупреждении говорится "UIView может не отвечать ...", потому что вы объявили ivar welcome_backView как UIVIew вместо своего подкласса.

UIView не имеет методов setSubviewsToXXX--Ваш подкласс этого делает.

Измените это:

UIView *welcome_backView;

на это:

Welcome_backView *welcome_backView;

Это работает, даже если объявлено как UIView, потому что во время выполнения,ivar указывает на экземпляр Welcome_backView, который отвечает на методы setSubviewsToXXX.

Еще одна вещь, которая не вызывает проблем (пока), - это имена методов.Имена методов, начинающиеся с «set», обычно используются для методов установки свойств и могут позже привести к путанице.

...