Предупреждение при передаче контекста из контроллера в NSView с помощью пользовательских методов - PullRequest
0 голосов
/ 16 декабря 2009

Кодирование против UIKit для iPhone.

Настройка, с соответствующей деталью:

SomeView.h:

#import <UIKit/UIKit.h>

@interface SomeView : UIView {
    SomeObject *myObject;
}

@property (assign) SomeObject *myObject;

-(void) doSomething;

@end

SomeView.m:

#import "SomeView.h"

@implementation SomeView

@synthesize myObject;

- (void)doSomething {
    NSLog(@"doing something");
}

- (void) drawRect:(CGRect)rect {
    // drawing is based on myObject
}

@end

controller.h:

#import <UIKit/UIKit.h>
#import "SomeView.h"

@interface Controller : NSObject {
    IBOutlet UIView *someView;
}

@end

Controller.m:

#import "Controller.h"

@implementation Controller

-(void)awakeFromNib {

    [someView doSomething];
    [someView setSomeObject:someObject]; 
}
@end

Я создаю экземпляр объекта контроллера в Интерфейсном Разработчике, и SomeView - это класс одного из моих пользовательских UIViews в главном окне моего приложения.

Теперь вопросы:

1) когда я запускаю вышеописанное, я получаю предупреждения для обеих строк: «Предупреждение: UIView может не отвечать на« doSomething »» и подобное предупреждение для setSomeObject. Зачем? (Код действительно работает, но мне не нравится видеть предупреждения.)

2) это правильный способ делать вещи? Что я действительно хочу, так это сделать SomeView осведомленным о someObject, чтобы при вызове drawRect для SomeView он мог изменять свое поведение в зависимости от текущего состояния someObject. Мне не нужно иметь объект непосредственно в SomeView; Я мог бы иметь это в контроллере, но представление все еще нуждается в некоторой информации от него, которая может измениться во время выполнения.

1 Ответ

3 голосов
/ 16 декабря 2009

Вы объявили someView как экземпляр UIView, но doSomething - это метод SomeView. Так что это правильно - класс, который вы указали компилятору, на который указывает переменная, не отвечает на это сообщение. Если вы не хотите предупреждений, вы должны сделать его SomeView * вместо UIView *.

В остальном ваша общая архитектура выглядит нормально для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...