나는 누군가가 전에 이것을 보았을 것입니다. 나는 분명히 뭔가 빠졌을 것입니다 ... 간단한 요약은 다음과 같습니다. 핵심 데이터 애플리케이션을 가지고 있는데, Car 및 CarMileage가 있습니다. 정확하게 자동차 여행으로 생각했습니다 (차량 < - >> CarMileage). CarMileage에는 주행 거리 (주행 거리, 주행 거리), forWork (BOOL) 등 몇 가지 속성이 있습니다. mileageForWork (float, forWork = YES이면 마일리지, forWork = NO이면 0)를 포함하는 커스텀 CarMileage 클래스를 만들었습니다. 또한 + keyPathsForValuesAffectingMileageForWork를 만들어 마일리지 및 forWork 집합을 반환합니다. 이제 해당 연도의 특정 자동차에 대한 총 percentMileageForWork를 계산해야합니다.핵심 데이터 awakeFromFetch의 NSNotification이 충돌을 야기 함
은 현재 내가 CarMileage에 있습니다
- (float) mileageForWork {
float mileageForWork;
if ([self.forWork boolValue] == YES) {
mileageForWork = [self.mileage floatValue];
} else {
mileageForWork = 0;
}
[[NSNotificationCenter defaultCenter] postNotificationName: @"mileageForWorkChanged" object:self];
NSLog(@"send notification");
return mileageForWork;
}
는 그런 자동차가 : 자동 저장된 파일을로드 할 때
는- (void) awakeFromFetch {
[super awakeFromFetch];
[self updatePercentMileageForWork];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(updatePercentMileageForWork)
name: @"mileageForWorkChanged"
object: nil];
NSLog(@"awakeFromFetch");
}
- (void) awakeFromInsert {
[super awakeFromInsert];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(updatePercentMileageForWork)
name: @"mileageForWorkChanged"
object: nil];
NSLog(@"awakeFromInsert");
}
, 나는 차와 CarMileage에 대한 NSArrayController를 포함하는 차량 섹션으로 이동하십시오. 로그에 "통지 보내기", percentMileageForWork의 값 및 "awakeFromFetch"가 표시되고 프로그램이 일시 중지되고 XCode의 스레드 탭이 szone_malloc_should_clear, EXC_BAD_ACCESS 코드 = 2로 팝업됩니다.
이 일이 일어나고 있습니다. 경험이 적은 나의 눈에는 문제가 알림을 관찰해야하는 곳인 것처럼 보입니다. 결국, 게시물은 로그를 작성합니다. 왜 그것이 충돌하는지 어떤 아이디어?
EDIT (10 월 14 일) - CarMileage의 -awakeFromInsert
및 -awakeFromFetch
에서 개체가 자동차를 관찰자로 추가하도록 키 값 관찰 모델로 변경하려고했습니다. 이것은 페치에 대해 예상대로 작동하지만 객체가 삽입되면 내 -updatePercentMileageForWork
메서드는 실행되지 않습니다. 그것은 CarMileage 관계에 Car가 Observer가 추가되었을 때 아직 설정되지 않았기 때문입니다 (그래서 Observer를 전혀 설정하지 않았습니다). 거기에 차를 이동하는 방법이있는 것 같아 그 새로운 CarMileage 개체를 관계 집합에 추가하는 메서드 내에서 Car, 그래서 그 문제가 발생하지 않습니다. 코어 데이터 자체의 코드를 엉망으로 만들어야하는지 잘 모르겠다. 최적화가 잘되어 있고, 코드가 정상적으로 읽히는 방법을 모르기 때문에 내 관계가 완전히 엉망이 될까 걱정된다. . 나는 "mogenerator"에 대해 뭔가를 들었다. 그러나 나는 문서를 찾을 수 없다. 그리고 내가 이미 혼란 스러울 때 나는 잘 이해하지 못하는 다른 프로그램을 사용하여 약간 불편 함을 느낀다 ...
내가 어디에서해야하는지 잘 아는 사람이 있는가? -addObserver:forKeyPath:options:context
을 호출하십시오. 그리고 관계가 설정되어있는 곳이면 어떻게할까요? 또는 알림을 사용하여 의도 한 원래 방식대로 어떻게 처리할까요?