2011-04-05 1 views
1

을 닫고 두 개의 서로 다른 클래스목적 C : 오픈이 열린 두 IBAction를 내 코드 하위 뷰를

- (IBAction) showListClient:(id) sender { 

if(list == nil){ 

    list = [[ListClient alloc] initWithNibName:@"ListClient" bundle:nil]; 
    [list setDelegate:self]; 
    [self.view addSubview:list.view]; 
} 

} 

에 하위 뷰를 닫고 가까운

-(IBAction)closeListClient { 
[self.view removeFromSuperview]; 
} 

지금 그것은을위한 괜찮아요 나는 더 많은 시간 내 목록을 사용하려면 처음,하지만 난 closeListClient에 작성해야

list = nil; 
[list release]; 

이제 내 문제는이 "목록"O를 선언한다 할수 있답니다

ListClient *list; 

내가 CloseListClient에 목록을 작성할 때 오류가 ... 내가 무엇을 할 수와 같은 클래스 ListClient에서?

답변

0

와 끝까지해야

list = nil; 
[list release]; 

//Change to 
[list release]; 
list = nil; 

있습니다 대표단 :

@protocol ListClientDelegate<NSObject> 
@optional 
- (void)listClientDidClose:(ListClient *)listClient; 
@end 

delegate에 대한 속성 정의 수정에 마지막으로 다음

-(IBAction)closeListClient { 
    [self.view removeFromSuperview]; 
    [self.delegate listClientDidClose:self] 
} 

다음 closeListClient 조치가 호출 될 때

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

그런 다음 (ListClient.m에) 대리인에게 메시지 보내기 SomeController.m은 위임 메서드를 구현합니다.

-(void)listClientDidClose:(ListClient *)listClient { 
    [list release]; 
    list = nil; 
} 

당신의 계획을 해결할 수있는 희망.

+0

감사합니다. – CrazyDev

0

문제점을 해결할 수있는 몇 가지 문제점을 지적하고 싶습니다. 나는 당신의 질문에 대해 특히보기를 열고 닫는 문구를 조금 잃어 버렸다. 어떤 단추를 눌렀는지에 따라보기를 숨기고 표시하고 싶을 것입니다.

이 코드는

-(IBAction)closeListClient { 
    [self.view removeFromSuperview]; 
} 

//I am sure you want to remove the list view 
-(IBAction)closeListClient { 
    [list.view removeFromSuperview]; 
} 

잘못 그리고 자료와 전무 작업은 뒤로 다음은 프로토콜을 정의 ListCLient.h에서

-(IBAction)closeListClient { 
    [list.view removeFromSuperview]; 
    [list release]; 
    list = nil; 
} 
+0

괜찮지 만 showListClient와 closeListClient를 두 개의 다른 클래스에 사용하면 showListCient에서 "list"를 사용할 때 ok이지만 closeClient에서는이 메서드가 다른 클래스에 있기 때문에 사용할 수 없습니다. 이해합니까? – CrazyDev