使用自定义方法将上下文从控制器传递到NSView时发出警告

时间:2009-12-16 19:08:39

标签: iphone objective-c

针对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中直接使用该对象;我可以在控制器中使用它,但视图仍然需要一些可能在运行时更改的信息。

1 个答案:

答案 0 :(得分:3)

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

否则,您的一般架构对我来说没问题。