2016-06-10 3 views
1

내 데이터 디자인을 사용하면 한 명의 사용자가 다수의 투표를 할 수 있습니다. 각 단일 기록은 또한 많은 표를 가질 수 있습니다. 내가 참조 마스터 뷰 컨트롤러에서이일대 다 관계에서 단일 값 검색/검색 Core Data Swift

enter image description here

에 의존하는 특정 요소에 대한 검색과 대규모 사투를 벌인거야, I했습니다 a를 기록 엔티티, 단일 var에 사용자 개체에 컨트롤러를 가져 오기 (즉, . device-user). 동일한 managedContext에 삽입됩니다.

이것이 좋다고 가정 할 때, 세부보기 컨트롤러에 연결하기 위해 준비 할 때 선택한 레코드를 전달하려고합니다 (문제 없음). 해당 레코드에 대한 모든 투표 배열 (아무런 문제가없는 것으로 생각합니다. 아래 코드). 그리고 여기에 까다로운 부분이 있습니다. 옵션 장치 사용자의 투표 기록 (내 질문)입니다. 내가 할 노력하고있어

let votesAsSet = record.votes 
controller.votes = votesAsSet?.allObjects as? [Vote] 

let predicateForUsersVote = NSPredicate(format: "record.votes.user == user") 
let thisUsersVoteForThisRecordAsSet = votesAsSet?.filteredSetUsingPredicate(predicateForUsersVote)     

controller.thisUsersVote = thisUsersVoteForThisRecordAsSet!.first as? Vote 

레코드의 사용자가 장치 사용자와 일치하는 핵심 데이터에서 사용자의 투표를 통해 반복하는 것입니다.

답변

1

record의 경우 이미 술어가 Votes 집합으로 작동하고 있으므로 user 속성을 직접 사용할 수 있습니다. 하지만 당신은 예를 들어, 장치 사용자에 대한 올바른 값으로 대체해야합니다

let predicateForUsersVote = NSPredicate(format: "user == %@", device-user) 

도 설정됩니다 설정이 조건을 적용한 결과, 그래서 당신은 .first보다는 .anyObject()를 사용할 필요가 있다고 생각 관련 Vote 개체를 가져옵니다.

+0

내 신이 작동합니다! 저는 술어, NSSets 및 핵심 데이터에 대해 많이 읽었습니다. 여러분의 대답은 잘 정리되어 있습니다. 잠시 보람 된 질문 하나 : 왜 "user == user"또는 "user == self.user"가 아닌가? – DrWhat

+0

술어 내에서 'user'는 평가되는 객체의'user' 속성 **을 참조합니다. ** :이 경우, 집합의 각'Vote' 객체. 마찬가지로'self'는 객체 자체를 의미합니다. 그래서 "user == user"와 "user == self.user"는 객체의'user' 속성과 객체의'user' 속성을 비교하며, 단지 모든 객체에 대해 true로 평가됩니다 -사용자. – pbasdf

+0

술어를 작성하는 코드의 값과 비교하려면 % @ 형식을 사용하여 값을 대체해야합니다. – pbasdf