2011-09-11 2 views
1

코어 데이터 작업을 수행하는 데 필요한 기본 작업을 이해하려면 Core Data Utlity Tutorial을 따라야합니다. 이 유틸리티는 코어 데이터 저장소를 생성하고 프로세스 ID와 실행 날짜가 실행될 때마다 & 시간을 저장합니다. 또한 이전 실행의 세부 사항을 보여줍니다.왜 primitiveDate가 코어 데이터 유틸리티 자습서에 정의되어 있습니까?

관리 대상 클래스가 정의 될 때까지 모든 것이 잘 진행되고있었습니다. 다음과 같이 정의됩니다 :

@interface Run : NSManagedObject 
{ 
    NSInteger processId; 
} 

@property (assign) NSInteger processId; 
@property (retain) NSDate* date; 
@property (retain) NSDate* primitiveDate; 

@end 

두 개의 다른 날짜 속성을 정의합니다. 자습서에서는 새 오브젝트가 삽입 될 때 primitiveDate이 설정되는 메소드도 정의합니다. 우리가 대신 date 재산을 primitiveDate을 설정하는 이유

- (void) awakeFromInsert { 
    [super awakeFromInsert]; 
    self.primitiveDate = [NSDate date]; 
} 

는 이해가 안 돼요. 나는 심지어 우리가 필요한 것이 모두 dateprocessId 일 때 primitiveDate이 정의되는 이유조차 모릅니다. 나는 모든 라인을 읽은 후 라인들 사이를 읽으려고했으나 여전히 얻을 수 없었다. 제발 도와 주실 수 있습니까? 내가 뭘 놓치고 있는지 모르겠다.

답변

3

중요한 라인은

원시적 인 접근은 변화가 별도의 취소 이벤트로 기록되게 KVO 알림을 방출하지 않는 것입니다.

설명서에 나와 있습니다.

self.date = [NSDate date]; 

self.primitiveDate = [NSDate date]; 

의 차이는 이전의 문제 키 - 값-관측 (KVO) 통지하지만, 후자는하지 않습니다. Cocoa + CoreData의 내장 된 실행 취소 시스템은 실행 취소 스택을 올바르게 준비하기 위해 KVO 알림을 찾습니다. 이것은 이전 작업을 수행하는 경우 UI에서 해당 작업을 실행 취소 할 수 있음을 의미합니다. UI에서 원하지 않는 작업을 실행 취소 할 수 있습니다.

프로그램이 더 커지고 더 성숙해질수록 중요 해지는 미묘한 차이입니다.

+0

답변 해 주셔서 감사합니다. 그러나'primitiveDate'를 설정하면'date'도 어떻게 설정됩니까? 어떤 곳에서도'date'를 설정하고 있지만 설정되고 저장되고 검색된 것으로 보입니다. – Hemant

+0

관리되는 객체에서, 속성을위한 표준 액세서'foo'와'setFoo :'는 엄청난 양의 마법을 필요로합니다. 따라서 관리 객체의 동작을 수정하려면 fancy magic을 포함하지 않는'primitiveFoo'와'setPrimitiveFoo :'를 사용해야합니다. 그러나 둘 다 동일한 속성'foo'를 참조합니다. http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html#//apple_ref/doc/uid/TP40002154-SW1을 읽어보십시오. – Yuji

+0

오 이런! 그게 다야? 나는 그것이 완전히 다른 속성이라고 생각했습니다. 그것을 지워 줘서 고마워. 나는 불타는 지옥에 있었다. (이 마법 물건은 프로그래밍에서 양날의 검이다.) – Hemant

관련 문제