私のモデルクラスは主に合成されたセッター/ゲッターメソッドで実装されています。すべてがうまくユーザーインターフェイスに接続されていました。後でtype
を変更するとminA
とmaxA
が変更される可能性があるので、1つのプロパティを変更すると他のプロパティが変更される可能性があることに気が付いたので、type
プロパティのsetter/getterメソッドを手動で書きました。コードは次のとおりです。自分のKVCセッター/ゲッターメソッドを実装するときにキャッチされない例外が発生するのはなぜですか?
QBElementType
@interface QBElementType : NSObject
@property NSRange minRange;
@property NSRange maxRange;
@end
@implementation QBElementType
@synthesize minRange;
@synthesize maxRange;
@end
QBElement
@interface QBElement : QBElementType{
QBElementType *_type;
}
@property (weak) QBElementType *type;
@property NSUInteger minA;
@property NSUInteger maxA;
@end
@implementation QBElement
@synthesize minA = _minA;
@synthesize maxA = _maxA;
- (QBElementType*)type
{
return _type;
}
- (void)setType:(QBElementType*)newType
{
[self willChangeValueForKey:@"type"];
_type = newType; // no need to bother with retain/release due to ARC.
[self didChangeValueForKey:@"type"];
/* Having the following 4 lines commented out or not changes nothing to the error
if (!NSLocationInRange(_minA, newType.minRange))
self.minA = newType.minRange.location;
if (!NSLocationInRange(_maxA, newType.maxRange))
self.maxA = newType.maxRange.location;
*/
}
@end
をQUESTION:
:私は要素の種類を変更するたびにそれ以来、私は キャッチされない例外を取得からキーパス 「type.minRange」のためのオブザーバー< NSTableBinder ...>のため更新できません< QBElement ...>、 キー「タイプ」の値が適切なKVOなしに変更されたため、最も可能性が高いです通知 が送信されています。 QBElementクラスのKVO準拠を確認します。
KVO-Complianceには何かがありますか?このエラーが発生するのはなぜですか?
私は 'willChangeValueForKey:'と 'didChange ....'を使わずにアプリを実行しようとしましたが、ユーザーインターフェースは決して変更を通知されませんでした! (サイドノート:minAはそれ自体の変数ですが、この質問のコードを簡略化したため、このようには表示されないかもしれません) –
その場合、何か間違っています。あなたは本当にそのようなセッターで 'willChange ...'と 'didChange ...'を呼び出す必要はありません。 「minA」がそれ自体の変数であるとして理解され、その場合、私の提案は機能しません。ただし、簡略化が変更されたり問題が取り除かれた場合に備えて、完全なコードを投稿してください。 –