2011-11-10 2 views
0

단추를 클릭 할 때 동적으로보기를로드하려고합니다.동적으로 UIView로드 및 해제

보기 'MYVIEW'

내가

IBOutlet UIView *myView; 

로 선언하고 만든 myView.xib에서 인터페이스 빌더를 통해 연결 말할 수 있습니다.

내가 속성을 설정하고 지금

내가 원하는이보기를 합성하지 않은 것은 버튼의 클릭에보기

그래서 난 내의 ViewController의 버튼을 누르면 방법으로 시도 메모리를 할당하는 것입니다

(void) buttonPressed1{ 
    myView = myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]; 
    myView.frame = CGRectMake(30, 40, 200, 200); 
    [self.view addSubview:myView]; 
} 

성공적으로로드되었습니다. 내가이 프로그램을 실행할 때 :

지금 내가

그래서 내가

-(IBAction) buttonPressed2:(id)sender 
{ 
    myView.alpha = 0; 
    [myView release]; 
} 

을 썼다 .. 다른 버튼 클릭이보기에 액세스하려면 그렇게 ---이 확인

를 작동

on buttonPressed 다른보기에서 해당보기를 추가하면 사라지고 해당보기가 해제됩니다.

하지만 지금은 다시는 버튼이 클릭에

modifying layer that is being finalized - 0x6807b60 

를 다음 말한다보기를 추가하는 버튼을 클릭, 그것은 충돌 ...

기본적으로 내 요구 사항은 메모리에 해당 뷰를 유지하는 것입니다

만 그것이 사용 된 후 사용하는 경우, 그것은 해제해야합니다 ..

그렇게 접근 이상은 ...

한 재화 또는 그것을 할 다른 방법이 d 그 오류는 무엇을 의미합니까 ????

! 더 쿼리는

MYVIEW에 메모리가 버튼 ????의 클릭에 런타임에 할당됩니다 ....

내가 통해이 테스트하고 경우에 따라 .... 여기에 위의 경우에

입니다 엑스 코드의 악기,

에 ..에

감사 도와주세요 ...

그래서 좀 도와주세요 ... 버튼 클릭에 그래프에 표시에는 할당이 없습니다 dvance

답변

1

보기를 해제 할 때 : [myView release]; 슈퍼 뷰에서 제거되지 않습니다. 또한 autoreleased 객체로 생성 된대로 해제하면 안됩니다.

솔루션은 다음과 같을 수

(void) buttonPressed1{ 
    if (myView) 
    { 
     [myView removeFromSuperview]; 
    } 
    myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]; 
    myView.frame = CGRectMake(30, 40, 200, 200); 
    [self.view addSubview:myView]; 
} 
-(IBAction) buttonPressed2:(id)sender 
{ 
    myView.alpha = 0; 
    //[myView release]; 
} 
+0

같아요 싶어이 방법에서로드 해당 뷰 객체 오토 릴리즈라고 U ?? 내가 싶어 –

+0

알고 위의 경우에 여기에 .... MYVIEW에 메모리가 버튼 ????의 클릭에 런타임에 할당됩니다 .... 과 내가 엑스 코드 악기를 통해이 테스트입니다 때, 버튼 클릭시 그래프에 표시되는 할당이 없습니다. 제발 도와주세요 ... –

+0

"이 메소드에서로드 된보기는 자동 렌더링 된 객체입니까?" 답변 : "예" – Nekto