0
XIB 내에서 NSObjectController에 대한 바인딩을 사용합니다. NSObjectController의 새 내용 객체를 설정하면 변경되지 않는 유일한 텍스트 필드 값은 첫 번째 응답자가있는 것입니다. 모델은 문제없이 변경됩니다.바인딩은 NSTextField를 업데이트하지 않습니다.
getter/setter를 사용하지 않으면 firstResponder (isBeingEdited)가있는 텍스트 필드가 변경되지 않고 변경됩니다.
내 KVC KVO의 문제점은 무엇입니까?
내 맞춤 getter/setter가 아래 그림입니다. 추 신 : 콘텐트 개체를 변경하기 전에 창을 첫 번째 응답자로 만들고 싶지 않습니다.
static const CGFloat MMsInOneInch = 25.4;
static const CGFloat inchesInOneMM = 0.0393700787402;
- (void)setPaperWidth:(CGFloat)paperWidth
{
[self willChange];
CGFloat newWidth = paperWidth * [self conversionKoeficientToDefaultUnitType];
if (!_isChangingPaperSize) {
if (self.paperSize == PPPaperSizeA4 && fabs(newWidth - widthSizeOfA4) > 0.001) {
[self setPaperSize:PPPaperSizeCustom];
}
if (self.paperSize == PPPaperSizeUSLetter && fabs(newWidth - widthSizeOfUSLetter) > 0.001) {
[self setPaperSize:PPPaperSizeCustom];
}
}
[self willChangeValueForKey:@"paperWidth"];
_paperWidth = newWidth;
[self didChangeValueForKey:@"paperWidth"];
[self didChange];
}
- (CGFloat)conversionKoeficientToDefaultUnitType
{
if ([self defaultUnitType] == [self unitType]) {
return 1;
}
if ([self defaultUnitType] == PPPrintSettingsUnitTypeMM) {
return MMsInOneInch;
}
if ([self defaultUnitType] == PPPrintSettingsUnitTypeInch) {
return inchesInOneMM;
}
return 1;
}
- (CGFloat)paperWidth
{
return _paperWidth/[self conversionKoeficientToDefaultUnitType];
}