Кодирование против 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; Я мог бы иметь это в контроллере, но представление все еще нуждается в некоторой информации от него, которая может измениться во время выполнения.