2011-01-26 4 views
0

이 클래스는 내가 이런 식으로 있습니다 .hiPhone - 수퍼 클래스 참조를 볼 수있는 클래스 중지

@interface myClass : UIImageView <UIGestureRecognizerDelegate>{ 

    @public id referenceOne; 
    @public id referenceTwo; 

} 

@property (nonatomic,retain) id referenceOne; 
@property (nonatomic,retain) id referenceTwo; 
@interface myClass : UIImageView <UIGestureRecognizerDelegate>{ 

    @public id referenceOne; 
    @public id referenceTwo; 

} 

@property (nonatomic,retain) id referenceOne; 
@property (nonatomic,retain) id referenceTwo; 
x.

@synthesize referenceOne, referenceTwo; 

이 클래스에는 대리자 프로토콜이 없습니다.

이 클래스를 기반으로하는 다른 클래스가 있습니다. 이러한 클래스 중 하나에 대해 대리자 프로토콜을 정의하고 내 구현 파일을 다음과 같이 정의했습니다.

@protocol MyBasedClassDelegate <NSObject> 
@optional 

- (void) doStuff; 

@end 

@interface MyBasedClass : myClass { 
    id<MyBasedClassDelegate> _delegate; 
} 

@property(nonatomic,assign) id<MyBasedClassDelegate> delegate; 

및 .m.이 MyBasedClassDelegate 클래스를 정의하자마자

@synthesize delegate; 

myClass에서 상속받은 referenceOne 및 referenceTwoid를 확인합니다. 이제 Xcode는 이것들이 선언되지 않았다고 말합니다. 프로토콜을 사용하지 않으면 참조를 다시 봅니다.

왜 그런가요? 어떻게 해결할 수 있습니까?

감사합니다.

+0

정확한 오류 메시지가 무엇입니까? –

답변

2

현재 오류가 있습니다 대신

편집 : 나

에서 MyClass.h

#import <Foundation/Foundation.h> 


@interface myClass : UIImageView <UIGestureRecognizerDelegate> { 
    id referenceOne; 
    id referenceTwo; 
} 

@property (nonatomic,retain) id referenceOne; 
@property (nonatomic,retain) id referenceTwo; 

@end 

myClass.m

#import "myClass.h" 
@implementation myClass 
@synthesize referenceOne, referenceTwo; 
@end 

MyBasedClass.h

#import <Foundation/Foundation.h> 
#import "myClass.h" 

@protocol MyBasedClassDelegate <NSObject> 
@optional 

- (void) doStuff; 

@end 

@interface MyBasedClass : myClass { 
    id<MyBasedClassDelegate> delegate; 
} 

@property(nonatomic,assign) id<MyBasedClassDelegate> delegate; 

@end 

작품

MyBasedClass.m

#import "MyBasedClass.h" 


@implementation MyBasedClass 
@synthesize delegate; 
-(void) dosmth { 
    referenceOne = nil; 
} 
@end 
+0

오케이, 오타가 있습니다. 고마워,하지만 그 오류를 해결하고 문제가 지속 ... – SpaceDog

+0

이상한 ... 나는 그 조사를 계속할 것입니다. 감사. – SpaceDog

+0

btw : 특히 인스턴스를 통해 속성에 액세스 할 때 인스턴스 변수를 public으로 선언하는 것은 좋지 않습니다. – Max

1

"_delegate"변수 이름을 "delegate"로 변경하면 효과가 있다고 생각합니다. (또는 합성 선을 주석으로 처리하고 작동해야합니다).

오늘도 비슷한 문제가 발생했습니다. 존재하지 않는 인스턴스 변수의 속성을 합성하면 컴파일러는 불평하지 않지만 어떤 이유로 더 이상 수퍼 클래스의 변수를 볼 수 없습니다.

저에게있어서 도움이 된 것은 http://www.iphonedevsdk.com/forum/iphone-sdk-development/53261-unable-access-superclass-member-variables-subclass-implementation.html입니다.

@interface MyBasedClass : myClass { 
    id<MyBasedClassDelegate> delegate; 
} 

또는

가 @synthesize 대표 = ​​_delegate 작업을 수행하는

@interface MyBasedClass : myClass { 
    id<MyBasedClassDelegate> _delegate; 
} 

이름을 변경;

+0

오케이, 오타가 있습니다. 고마워,하지만 오류를 수정하고 문제가 지속됩니다 ... – SpaceDog

+0

잘 모르겠습니다. 죄송합니다. 제공된 코드를 복사하고 오타를 수정하여 나에게 잘 맞 춥니 다. –

+0

매우 이상합니다. 감사. 나는 계속 조사 할 것이다. – SpaceDog

관련 문제