针对iPhone的UIKit编码。
设置,相关详细信息:
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
我在Interface Builder中实例化控制器对象,而SomeView是我应用程序主窗口中的一个自定义UIViews的类。
现在,问题:
1)当我运行上述内容时,我会收到两行警告:“警告:'UIView可能无法响应'doSomething'”以及类似的setSomeObject警告。为什么? (代码实际上似乎有效,但我不喜欢看警告。)
2)这是正确的做事方式吗?我真正想要的是让SomeView知道someObject,这样当调用drawRect for SomeView时,它可以根据someObject的当前状态改变它的行为。我不需要在SomeView中直接使用该对象;我可以在控制器中使用它,但视图仍然需要一些可能在运行时更改的信息。
答案 0 :(得分:3)
您将someView
声明为UIView的实例,但doSomething
是SomeView的一种方法。所以它是正确的 - 你告诉编译器的变量指向的类不响应该消息。如果您不想要警告,则必须将其设为SomeView *
而不是UIView *
。
否则,您的一般架构对我来说没问题。