2012-04-25 4 views
0

내 테이블 뷰에서 검색 후 채우기 전에 테이블 뷰의 맨 위에있는 텍스트 필드에 현재 검색의 최소 거리와 최대 거리를 추가하고 싶습니다. 이러한 매개 변수를 결정하는 방법을 찾지 못하고 내 검색 결과가 2 ~ 50 개까지 다양합니다. 루프의 현재 위치에서 각 항목까지의 거리를 비교하는 간단한 방법을 사용하고 싶지 않습니다. 누구든지 변경할 수있는 배열에서 요소의 최소/최대를 결정하기위한 명확한 방법을 가르쳐 주시겠습니까?테이블 뷰 데이터의 최소/최대 메서드

답변

0

배열의 모든 요소에서 값이 필요한 경우 어떻게 든 배열을 반복해야합니다. 루프에는 아무런 문제가 없습니다. 그래도 루프를 통해 배열을 통과하는 다른 방법이 있습니다. 아마도 -[NSArray enumerateObjectsUsingBlock:] 당신이 행복 할 것입니다 : 배열을 열거하기위한

__block CGFloat minDistance = INF; 
__block CGFloat maxDistance = -INF; 
[locationsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){ 
    CGFloat dist = // calculate distance from obj to current location 
    if(dist < minDistance){ 
     minDistance = dist; 
    } 
    if(dist > maxDistance){ 
     maxDistance = dist; 
    } 
}]; 

다른 옵션은 Enumeration 아래의 컬렉션 프로그래밍에 관한 주제 문서에서 찾을 수 있습니다.

또한 Key-Value Collection Operators을보아야합니다. [locationsArray valueForKey:@"@max.distance"]은 배열의 구성원 중 하나가 보유한 최대 distance을 끌어냅니다. 이것은 정확히 당신이 찾고있는 것처럼 보일지 모르지만, 알고 있어야 할 두 가지가 있습니다. 첫째, 객체는 distance 속성이 이미 있어야합니다.이 절차의 일부로 계산을 수행 할 수 없습니다. 둘째, valueForKey:은 각 속성 액세스 결과에 compare:을 전송하기 때문에이 속성은 CGFloat과 같은 프리미티브가 아닌 개체 (이 경우 아마도 NSNumber) 여야합니다.

+0

어제 밤 kvc 사업자를 읽고 있었는데, 그 방법이 될 것으로 보였습니다.하지만 구현을 시작하기는 어려웠습니다. 감사합니다. – Crask422

+0

일부 경우에 매우 편리합니다. 예를 들어 어레이 컨트롤러를 사용할 때 IB 내부에서 사용할 수도 있습니다. 다행히 도울 수있어. –