2012-05-12 1 views
1

나는 부모 관계가 (복수형) <-->>입니다. 난 그냥 단지 하나를 필요로 할 때 그리고 내가 모든 자식 (들)을 인출 할 때의 관계는, Parent.children = (NSSet *) child(s)'가장 최근의'단일 엔티티 코어 데이터를 가져 오기위한 가장 쉬운 가져 오기 요청

는 아이 엔티티의 타임 스탬프 특성을 기반으로 최신 엔티티 번이 있습니다.

가져 오기 요청을 생성하고 한도 가져 오기를 설정하고 정렬 설명자를 사용하여 timeStamp에 따라 주문하는 것보다 쉽게 ​​가져올 수있는 가장 쉬운 방법을 배회했습니다.

더 쉬운 방법이 있습니까? 아마도 어쩌면 전화 일 수도 있습니다 :

[Parent.children firstObject]; 

이유는 제가 앱을 통해 여러 번 가져와야하기 때문입니다. 어떤 경우에는, 나는 최신 하위 엔티티를 -(void)awakeFromFetch() of a Parent Entity에 가져와야 할 것이지만, 그 이유는 특별히 메모리의 측면에서 다른 어떤 것보다 쉬운 방법을 원했던 이유입니다.


아이 엔티티를 가져 오기 할 때, 내가 좀 아이가이 술어 사용하여 2 개 이상의 부모 엔터티에있는 그들의 무리 가져 오기 : 내가 모든 얻을 것 때문에,

NSPredicate *pred = [NSPredicate predicateWithFormat:@"forParent IN %@", [Array of Parents]]; 

결과 NSSet에서을 해당 개체에 대해 필요한 자식 엔터티를 최신 자식에 대한 포인터를 timeStamp 특성 (NSDate)에 따라 할당 할 수 있으면 매우 편리합니다.

NSSet 결과를 얻은 후에 분명 NSSet에서 찾은 최신 엔티티에 대한 포인터를 각 자식에 대해 반복 할 수 있지만 꽤 힘들어 보이지만 한 포인터 만 할당해야합니다. 특정한 부모 개체의 최신 엔티티가 잠재적으로 100 개가 넘는 엔티티를 가질 수있는 NSSet을 반복하면 bad programming으로 보입니다.

아이디어가 있으십니까?

+2

및 종류, 나는'최대로 비슷한 문제 NSExpression에 사용했습니다'기능.다른 해결책은 부모 엔티티의 모델에서 latestChild 속성을 만들고 모든 새 자식을 만들 때 설정하는 것입니다. 이상적은 아니지만 작동하며 가장 빠른 솔루션입니다. –

+0

비트 남자를 정교하게 해석 할 수 있습니까? 나는 아주 '부모 엔티티에 모델로 생성'을하지 못했습니다. – user134611

+0

설명해 드리겠습니다 :) 부모와 자식이라는 두 엔티티가 있습니다. latestChild라는 새 속성을 모델의 부모 엔터티 (xcode로 정의 된 MOM)에 추가하고 latestChild를 최근 Parent.childrens에 추가 한 자식으로 설정합니다. 따라서, latestChild는 술어 나 반복을 통해 계산 된 관계 대신 Child와의 직접적인 관계입니다. –

답변

1

몇 가지 옵션이 있습니다. 시간에 따라 fetchLimit = 1 인 가져 오기 요청은 실제로 나쁜 옵션이 아닙니다. 모델 GUI에서 타임 스탬프 필드를 INDEX로 만들 수도 있으며 조회가 매우 빠릅니다.

데이터베이스가 계속 변경되고 항상 최신 항목에 액세스하려는 경우 NSManagedObjectContext에 대한 DidSave 알림 등록을 고려하십시오.

컨텍스트가 저장 될 때 (또는 개체가 변경된 경우에도) 호출 될 수 있습니다. 알림 메서드에서 삽입 된 항목을보고 가장 최근 값을 사용하도록 업데이트하십시오.

삽입 된 개체를 검색하고 가장 큰 타임 스탬프로 일치하는 항목을 가져올 수 있습니다.

저장하고 객체 변경에 대한 통지는 다음과 같습니다

NSManagedObjectContextDidSaveNotification NSManagedObjectContextObjectsDidChangeNotification

대신 제한 1