문제

나는이 사이트의 문서와 다른 게시물을 통해보고 있었지만, 이것을 해결하는 방법을 이해할 수는 없습니다. 실제로 SQL에서는 매우 간단합니다.

기본적으로 나는 2 개의 엔티티 악기와 거래가 있습니다. "거래"는 "계측기"를 사용하여 원하는 작업을 수행합니다. 이제이 거래에 사용 된 거래 속성 및 기기 속성을 나열하고 싶습니다. 그래서 SQL에서는 다음과 같습니다.

instruments.id = deals.instrumentid에서 interments inner join 거래 *를 선택하십시오.

nspredicate로 어떻게 이것을 달성 할 것인가?. 모든 도움은 크게 약정됩니다. 고맙습니다.

-oscar

도움이 되었습니까?

해결책

먼저 SQL 사고 방식에서 벗어나기 위해 최선을 다해야합니다. 핵심 데이터 아니다 orm. 객체 그래프 관리 프레임 워크입니다 그냥 발생합니다 SQLITE를 하나의 가능한 지속성 백엔드로 사용합니다. 환경 변수 (디버깅)를 통해 사용하는 SQL을 볼 수 있지만 SQL은 개인 구현 세부 사항입니다. 핵심 데이터는 SQL없이 구현 될 수 있습니다.

따라서 DB 테이블 측면에서 생각하지 마십시오. 당신은 모음이 있습니다 Deal ISNONCES. 당신은 그들의 속성을 원하십니까? 사용 키 값 코딩 해당 인스턴스의 속성과 관련 Instrument 인스턴스. 당신이 있다고 가정합니다 NSSet 대신에 Deals, 라고 불리는 deals:

[deals valueForKey:@"dealProperty"];

당신에게 줄 것입니다 NSSet 값의 dealProperty 각각에서 Deal 사례. 한 번에 여러 속성을 얻으려면 사용할 수 있습니다. -[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]. 이 방법을 사용하여 "원 레벨 깊이"키 만 얻을 수 있으므로 예를 들어 'DealProperty1', 'DealProperty2'는 'DenetRelation.RelationProperty'또는 'DealLelation.@count'가 아닙니다.

"중첩"속성을 얻으려면 키 경로를 사용하기 만하면됩니다.

[deals valueForKeyPath:@"instrument.instrumentProperty"];

당신에게 값의 세트를 줄 것입니다 instrumentPropertyInstrument 각각과 관련된 인스턴스 Deal 예, 가정합니다 instrument 일대일 관계입니다 Deal 에게 Instrument. 관계가 일대일 인 경우 일련의 세트를 얻게됩니다. instrumentProperty 가치.

당신은 항상 이것을 더 명시 적으로 할 수 있습니다 (분명히이 코드는 세미콜론을 생략 한 이후로 어떤 일도하지 않으며 구문 적으로 정확하지 않지만 개요를 보여줍니다).

for(Deal *deal in deals) {
  //use attribute access to get properties of deal and associated instrument
  deal.dealProperty
  deal.instrument.instrumentProperty //for one-to-one

  for(Instrument *instrument in deal.instruments) { //for one-to-many instruments
    instrument.instrumentProperty;
  }
}

적절한 컬렉션의 열거 사용.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top