2012-10-11 4 views
1

UIScrollView를 서브 클래 싱하여 조금 사용자 정의했습니다. 사용자가 UIScrollView에서 특정 작업을 수행했다는 것을 다른 여러 클래스에 알리는 대리자를 만들려고합니다. 내 UIScrollView 클래스에서 아래 코드가 있습니다. 내가으로 실행하고 문제는 내가 경고를 얻고있다UIScrollView 하위 클래스에서 대리인 만들기

재산권 '위임' '나는 것을 볼 수있는 UIScrollView'

'속성에서 상속 속성과 일치하지 않습니다'(강한) 유지 이것은 내 클래스가 UIScrollView에서 상속했기 때문에 발생하지만 내 대리자는 NSObject를 준수합니다. 내 자신의 대리자를 만들려고 처음 시도한 것입니다. 이 문제를 해결하려면 어떻게해야합니까?

내 코드 :

#import <UIKit/UIKit.h> 

@protocol ChangeSpaceDelegate <NSObject> 
- (void)changeSpace:(int)spaceId; 

@end 

@interface CustomUIScrollView : UIScrollView { 
    id<ChangeSpaceDelegate> delegate; 
} 

@property (retain, nonatomic)id delegate; 

@end 

답변

2

구체적으로, 당신은 당신이 UIScrollView에서 얻을 delegate 재산 property 속성을 재정의하는 귀하의 질문에 대답합니다. 모든 대표자와 마찬가지로 weak (또는 pre-iOS 5, unsafe_unretained)이어야합니다.

그러나 이런 식으로해서는 안됩니다. UIScrollView에는 이미 델리게이트가 있으며, 새로운 델리게이트 메소드를 구현하는 자신의 델리게이트 객체를 넣기를 원한다면 UIScrollView의 내부 동작은 만족스럽지 않을 것입니다. 새로운 프로토콜과 이에 대한 새로운 위임 속성을 정의하십시오.

@property (weak, nonatomic) id<ChangeSpaceDelegate> changeSpaceDelegate; 
1

당신은 당신이 UIScrollView에서의 서브 클래스되기 때문에 사용자 정의있는 ScrollView 클래스의 delegate 개체를 만들 필요가 없습니다. 사용자 정의 scrollview 클래스에서 직접 self.delegate으로 사용할 수 있습니다.

1

@Steve Madsen에서 언급했듯이 종종 서브 클래스에 대한 자체 대리자 속성을 추가합니다. UITableView처럼 동일한 DataSourceDelegate 속성이 있고 같은 개체가 할당되어 있습니다. 장기적으로는 이미 수퍼 클래스에서 이미 구현 된 것을 반복하지 않아도되고 서브 클래스 구현을 더 잘 관리 할 수 ​​없게함으로써 갚을 수 있습니다.

관련 문제