2009-12-16 3 views
0

iPhone 용 UIKit에 대해 코딩.컨트롤러에서 사용자 정의 메서드로 NSView로 컨텍스트를 통신 할 때 경고

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는 내 응용 프로그램의 기본 창에서 내 사용자 지정 UIView 중 하나의 클래스입니다. 이제

, 질문 : 나는 위를 실행할 때

1), 나는 두 줄에 대한 경고를 얻을 : 및 setSomeObject 비슷한 경고 : "경고 해봐요 '으로 UIView가 응답하지 않을 수 있습니다'". 왜? (코드는 실제로 작동하는 것처럼 보이지만 경고를 보는 것을 좋아하지 않습니다.)

2) 올바른 방법일까요? 내가 실제로 후, SomeView SomeView, someView에 대한 drawRect 호출 될 때, someObject 현재 상태를 기반으로 동작을 변경할 수 있도록 인식하고 있습니다. SomeView에서 직접 객체를 가질 필요는 없습니다. 나는 컨트롤러에서 그것을 가질 수 있었지만, 뷰는 런타임에서 변경 될 수있는 정보를 여전히 필요로한다.

답변

3

을 UIView의 인스턴스로 선언했지만 doSomething은 SomeView의 메서드입니다. 변수가 가리키는 컴파일러에 지시 한 클래스는 그 메시지에 응답하지 않습니다. 경고를 원하지 않으면 UIView * 대신 SomeView *으로 설정해야합니다.

그렇지 않으면 일반적인 아키텍처가 나에게 잘 들립니다.

+0

감사합니다. 컨트롤러 헤더에 형식이 잘못되었습니다. – Jaanus

관련 문제