2013-06-05 6 views
2

코어 데이터가있는 애플리케이션을 만들기 시작했습니다. NSFetchedResultController를 사용하고 싶습니다. 애플의 example에는 두 가지 추가 속성이 있습니다. primitiveSectionIdentifier 사과의 경우를 들어 primitiveTimeStamp NSFetchedResultsController로 과도 속성 이해하기

  • primitiveSectionIdentifier
    • 대조적으로

      , 과도 특성을 가진 당신이 코드를 작성해야 두 속성을 지정하고 말한다 변환을 수행합니다.

      왜냐하면 섹션 식별자가 일시적 속성이기 때문입니다. 하지만 timeStamp는 어떨까요?이 속성은 일시적인 것이 아니며 primitiveTimeStamp 속성이있는 이유는 무엇입니까? 왜 timeStamp에 대한 명시적인 setter가 있습니까?

      - (void)setTimeStamp:(NSDate *)newDate { 
      
          // If the time stamp changes, the section identifier become invalid. 
          [self willChangeValueForKey:@"timeStamp"]; 
          [self setPrimitiveTimeStamp:newDate]; 
          [self didChangeValueForKey:@"timeStamp"]; 
      
          [self setPrimitiveSectionIdentifier:nil]; 
      } 
      

      또는 실제 설정자가 아닐 수 있습니까? _timeStamp = newDate는 어디에 있습니까?

    답변

    4

    CoreData가 접근자를 생성합니다. "모델 속성에 대한 public 및 primitive get 및 set 접근 자 메서드"를 생성합니다.

    은 그래서이 경우에는 발생했습니다

    -(NSDate*)timeStamp; 
    -(void)setTimeStamp:; 
    -(NSDate*)primitiveTimeStamp; 
    -(void)setPrimitiveTimeStamp:; 
    

    "왜 primitiveTimeStamp 속성이있다?"

    선언은 단순히 컴파일러 경고를 표시하지 않습니다. 즉. 속성 선언을 제거한 경우 컴파일에 대한 경고가 표시되지만 코드는 계속 실행됩니다. 또는 사용할 수도 있습니다 [self setPrimitiveValue:newDate forKey:@"timeStamp"];

    "왜 timeStamp에 대한 명확한 설정자가 있습니까?"

    timeStamp를 설정하려면 'sectionIdentifier'를 다시 계산해야하기 때문에 필요합니다. 이것은 no nil으로 설정하고 get 접근자가 지연을 다시 계산하게함으로써 가능합니다.

    "where는 _timeStamp = newDate입니까?"

    이와 동일한 작업은 기본적으로 자동 생성 구현 setPrimitiveTimeStamp에서 수행됩니다. 워드 프로세서에서

    인용 한 :

    기본적으로는, 코어 데이터는 동적으로 생성 효율적인 공공 및 원시 얻을 모델링 특성 (속성 및 관계) 관리 객체 클래스에 대한 접근 방법을 설정합니다. 여기에는 mutableSetValueForKey에 대한 설명서에 설명 된 addObject : 및 removed :와 같은 키 - 값 코딩 가변 프록시 메소드가 포함됩니다. - 관리 대상 객체는 모든 다 대 관계에 대해 사실상 변경 가능한 프록시입니다.

    참고 : 고유 한 접근자를 구현하도록 선택한 경우 동적으로 생성 된 메서드는 사용자 코드를 절대 대체하지 않습니다. 예를 들어, firstName 속성을 가진 엔티티가 제공되면 코어 데이터는 firstName, setFirstName :, primitiveFirstName 및 setPrimitiveFirstName :을 자동으로 생성합니다. Core Data는 NSManagedObject가 나타내는 엔티티에 대해서도이를 수행합니다. 이러한 메서드를 호출 할 때 컴파일러 경고를 표시하지 않으려면 "선언"에 설명 된대로 Objective-C 2.0의 선언 된 속성 기능을 사용해야합니다.

    +0

    답변을 주셔서 감사합니다. 그러나 이러한 모든 속성의 의미를 이해하지 못했습니다. 프리미티브 접두어. 왜냐하면 핵심 데이터가 Entity의 모든 속성에 대한 원시 getter 및 setter를 생성한다는 것을 이해하기 때문입니까? 단일 속성에 대해 두 가지 속성이있는 이유를 설명해주십시오. – taffarel