목표 C 질문 :대물 C 상속 및 setter
는 난의 ViewController의 수퍼 및 데이터 제어기의 수퍼 클래스가있다. 데이터 컨트롤러는 UpdateController가 업데이트되었을 때이를 알려주는 위임을 갖는다. 모두 작동하는 것처럼 보이지만 일부 로깅을 넣으면 매번 대리자 메서드가 두 번 호출되는 것 같습니다. 실제로 모든 SubDataController 인스턴스가 두 개 있다고 생각합니다. 어딘가에서 뭔가 잘못된 것을 만들어야합니다. 아무도 내가 뭘 잘못하고 있는지 볼 수 있니?
데이터 집약적 인 앱의 개별 화면이 있습니다. 각 뷰가 가지고 볼 수 있듯이
DmsProgressBaseViewController.h
@class DmsProgressDataController;
@interface DmsProgressBaseViewController : UIViewController
@property(readonly,assign,nonatomic)DmsProgressDataController *dataController;
//index, so we be identified in container
@property(assign,nonatomic)NSInteger index;
@end
DmsProgressBaseViewController.m
@implementation DmsProgressBaseViewController
@synthesize dataController=_dataController;
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(DmsProgressDataController*)dataController
{
if(!_dataController){
_dataController=[[DmsProgressDataController alloc]init];
}
return _dataController;
}
.....
@end
: 나는 모두에서 상속의 UIViewController의 슈퍼 클래스가 있도록 사용자가 설정 한 나머지 서비스를 통해 데이터를로드하고이를 코어 데이터로 가져 오는 데이터 컨트롤러. .....
- (id)init
{
self = [super init];
if (self) {
}
return self;
}
-(void)loadDataFromRest
{
NSLog(@"loading %@",self.resourceUrl);
if(self.resourceUrl!=nil){
[self loadDataFromRest:self.resourceUrl];
}
}
....
#pragma mark - delegate methods
-(void)notifyDataLoadedSuccessfully
{
if(self.delegate!=nil){
[self.delegate dataLoadedSuccessfully];
}
}
@end
그래서 사람들은 슈퍼 클래스입니다 DmsProgressDataController.h
의 예를
@class AFHTTPRequestOperation;
@class DmsProgressDataController;
@protocol DmsProgressDataControllerDelegate
-(void)dataLoadedSuccessfully;
@end
@interface DmsProgressDataController : NSObject
@property(nonatomic,assign)id delegate;
@property(nonatomic, strong)NSString *resourceUrl;
-(void)loadDataFromRest;
-(void)loadDataFromRest:(NSString*)resourceUrl;
-(void)handleRestSuccess:(id)jsonResponse;
-(void)handleRestError:(NSError*)error forOperation:(AFHTTPRequestOperation*)operation;
//delegate method
-(void)notifyDataLoadedSuccessfully;
@end
DmsProgressDataController.m @implementation DmsProgressDataController
을 : 또한에서 상속됩니다 하위 클래스는 다음과 같습니다. DmsProgressOverallViewController.h @class DmsProgressOverallDataController;DmsProgressOverallDataController.h
@interface DmsProgressOverallDataController : DmsProgressDataController
@end
DmsProgressOverallDataController.m
012 다음으로 datacontroller@interface DmsProgressOverallViewController : DmsProgressBaseViewController
@property(readonly,strong,nonatomic)DmsProgressOverallDataController *dataController;
@end
DmsProgressOverallViewController.m
@interface DmsProgressOverallViewController()<DmsProgressDataControllerDelegate>
@end
@implementation DmsProgressOverallViewController
@synthesize dataController=_dataController;
- (void)viewDidLoad
{
[super viewDidLoad];
[self.dataController loadDataFromRest:@"overall"];
self.dataController.delegate=self;
}
-(DmsProgressDataController*)dataController
{
if(!_dataController){
_dataController=[[DmsProgressOverallDataController alloc]init];
}
return _dataController;
}
#pragma mark - datacontroller delegate method
-(void)dataLoadedSuccessfully
{
NSLog(@"Overall data loaded successfully");
}
@end
충분한 정보를 제공하시기 바랍니다. 모든 도움을 주셔서 다시 한 번 감사드립니다.
나는 용어를 뒤죽박죽이라고 지적하겠다. '@interface SuperViewController : UIViewController'는'SuperViewController'가'UIViewController'의 서브 클래스라는 것을 의미합니다. 'UIViewController'는'UIResponder'의 서브 클래스입니다. 그리고'UIResponder'는 기본 클래스 인'NSObject'의 서브 클래스입니다.** 편집 : **'SuperViewController'의 당신의 이름이'SubViewController' 클래스를 참조하고 있음을 봅니다. – bshirley
문제의 대의원에 대해 더 자세히 알려줘야합니다. 우리는 그것에 대한 정보가 없습니다. 이것은 상속 또는 합성 문제가 아닙니다. – bshirley
다른 말처럼, 코드는 읽기가 어렵습니다. SuperViewController는 실제로 UIViewController의 하위 클래스입니다. 그리고 우리가 모르는 SuperDataController를 사용합니다. –