2009-12-16 37 views
0

针对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)当我运行上面,我得到两条线警告:和setSomeObject类似的警告:“警告DoSomething的‘“的UIView可能不响应’”。为什么? (代码实际上似乎工作,但我不喜欢看到警告。)

2)这是正确的做事方式吗?我真正追求的是让SomeView知道someObject,这样当调用SomeView的drawRect时,它可以根据someObject的当前状态改变它的行为。我不需要直接在SomeView中获得对象;我可以将它放在控制器中,但视图仍然需要一些可能在运行时更改的信息。

回答

3

您声明作为UIView的一个实例,但doSomething是SomeView的一种方法。所以它是正确的 - 你告诉编译器的变量指向的那个类不响应该消息。如果您不需要警告,则必须将其设为SomeView *而不是UIView *

否则,您的一般架构对我来说看起来还不错。

+0

谢谢,就是这样,我在控制器头部中输入了错误的类型。 – Jaanus 2009-12-16 19:18:50

相关问题