Apple의 KVC로 일부 테스트를하려고하지만 KVC를 통해 값을 변경할 때 어떤 이유로 KVO를 트리거 할 수 없습니다.값 변경시 KVO가 트리거되지 않음
나는 다음과 같은 코드를 가지고 : 당신이 정말, 정말 기본 코드는, 그래서 부끄럽다 것 볼 수 있습니다처럼
#import <Foundation/Foundation.h>
@interface Character : NSObject
{
NSString *characterName;
NSInteger ownedClowCards;
}
@property (nonatomic, retain) NSString *characterName;
@property (nonatomic, assign) NSInteger ownedClowCards;
-(void)hasLostClowCard;
-(void)hasGainedClowCard;
@end
@implementation Character
@synthesize characterName;
@synthesize ownedClowCards;
-(void)hasLostClowCard
{
}
-(void)hasGainedClowCard
{
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"Change");
}
@end
int main()
{
Character *sakura;
Character *shaoran;
//---------------------------------------------------------------------
// Here begins the KVO section.
[sakura addObserver:sakura forKeyPath:@"ownedClowCards" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
//Create and give the properties some values with KVC...
sakura = [[Character alloc] init];
[sakura setValue:@"Sakura Kinomoto" forKey:@"characterName"];
[sakura setValue:[NSNumber numberWithInt:20] forKey:@"ownedClowCards"];
shaoran = [[Character alloc] init];
[shaoran setValue:@"Li Shaoran" forKey:@"characterName"];
[shaoran setValue:[NSNumber numberWithInt:21] forKey:@"ownedClowCards"];
//Done! Now we are going to fetch the values using KVC.
NSString *mainCharacter = [sakura valueForKey:@"characterName"];
NSNumber *mainCharCards = [sakura valueForKey:@"ownedClowCards"];
NSString *rival = [shaoran valueForKey:@"characterName"];
NSNumber *rivalCards = [shaoran valueForKey:@"ownedClowCards"];
NSLog(@"%@ has %d Clow Cards", mainCharacter, [mainCharCards intValue]);
NSLog(@"%@ has %d Clow Cards", rival, [rivalCards intValue]);
[sakura setValue:[NSNumber numberWithInt:22] forKey:@"ownedClowCards"];
}
난이 어떤 이유에서 동작하지 않습니다. 내가하려고하는 모든 것은 ownedClowCards가 변경되면 알림을받는 것입니다. 나는 관찰자들을 등록하고있다. 프로그램을 실행하면 프로그램이 끝나면 "변경됨"메시지가 표시됩니다. 하지만 절대로 그렇지 않습니다. 변경 내 프로그램에 결코 그래서 나는 observeValueForKeyPath : ofObject 가정합니다 : 변경 : 컨텍스트 : 호출되지 않습니다.
어떤 도움이 필요합니까?
* 자기 촬영 * 이것은 단지 3 시간의 수면을 취한 결과입니다. 무리 감사. –
좋아, 내 어리 석음을 고친 후에는 효과가있다. 변경된 내용이 인쇄되었지만 바로 다음에이 메시지가 표시됩니다. Key value observer가 등록되어있는 동안 Character 클래스의 인스턴스 0x100108380이 할당 취소되었습니다. 관측 정보가 누출되어 다른 물체에 실수로 부착 될 수 있습니다. - 나는 내 물건을 완전히 파멸시키지 않기 때문에 얻지 못합니다. –
Erm은 신경 쓰지 않습니다. 그냥 관찰자를 제거하여 이것을 고쳤습니다. 다른 코드 줄을 작성하기 전에 커피를 가져 가야합니다. 도움을 청합니다. –