0

숫자와 숫자에 대해 NSObject의 하위 클래스가 있습니다. 이들 중 둘 다 데이터 소스 (숫자 또는 숫자)와 델리게이트 , 뷰 컨트롤러.모델 객체의 속성으로보기 대체

보기를 & 모델이 함께 작동하여 숫자보기를 해당 숫자의 속성으로 설정하는 데 유용하다는 사실을 발견했습니다.

예를 들어, Number 클래스에는 숫자가 들어있는 NSMutableArray 속성이 있습니다. 이 코드는 잘 작동

-(void) updateNumberViewFrameSize:(ACNumberView*) sender 
{ 
    NSUInteger i; 
    float width = 0, height = 0; 
    for (ACDigit* digit in [sender.dataSource returnNumberViewDataSource].digitArray) 
    { 
     width += digit.digitView.size.width; 
     height += digit.digitView.size.width; 
    } 
    sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, width, height); 
} 

을,하지만 난 그게 좋은 방법이 아니다 느낌 : 나는 해당 NumberView의 크기를 찾으려면

, 나는 컨트롤러에서 다음과 같이 코드를 작성할 수 있습니다 쓰기 모델 자체에서 포인터를 사용하지 않아도 모델에서 뷰에 대한 포인터를 보유하십시오.

나쁜 실행 인 경우, 잠재적 인 함정은 무엇이며,이 유형의 끝을 얻는 더 좋은 방법이 있습니까?

답변

1

첫 번째 : 당신 말이 맞습니다. 이것은 좋은 디자인이 아닙니다.

두 번째 : 모델 내부의 숫자보기 크기를 계산합니다. 그러나 숫자는 크기 자체를 알아야합니다. 데이터 소스를 통해 번호를 알고 숫자를 가져올 수 있습니다. 그래서 그것의 크기를 계산하기위한 모든 정보를 가지고 있습니다.

문제를 표시하려면 (이 상황이 iOS에서 흔히있는 것이 아니어도) 상상해보십시오. 동일한 숫자를 두 자리 (= 숫자보기와 함께)로 표시한다고 상상해보십시오. 그러면 모델이 깨질 수 있습니다. 왜?

솔루션 : 그래픽 상태 (도면, 크기, ...)와 관련된 모든 코드를 숫자보기 및 숫자보기에 넣으십시오. 중간에 추가 작업이 될 것입니다. 그러나 결국 모든 코드가 뷰 레이어로 마이그레이션 될 때 모델 내부에서 코드를 계산하는 것만 큼 쉽습니다.

+0

왜 잘못되었는지에 대한 좋은 예입니다. 보기에서 하위보기에 액세스 할 수 있습니까? – chartman

+1

@chartman 예, [하위보기보기]. –

+0

맞습니다. 뷰에서 데이터를 가져 오는 것보다 뷰에 유지해야하는 내용을 기반으로 뷰의 크기를 계산하는 것이 훨씬 낫습니다. – chartman