2

CoreData に「NoteEntity」という名前のエンティティを作成し、NSManageObject サブクラスを生成します

@interface NoteEntity : NSManagedObject
@property (nonatomic, retain) NSDate * time;
@end

次に、Observer を追加して、オブジェクトを選択したときに時間の変化を確認します。

[self addObserver:self forKeyPath:@"noteEntity.time" options:NSKeyValueObservingOptionOld context:KNoteEntityTime];

オブザーバー コード:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ( context == KNoteEntityTime ) {

        NSDate *oldTime = (NSDate *)[change objectForKey:NSKeyValueChangeOldKey] ;
        if (oldTime != NULL) {
            NSLog(@"CHANGE:From %@ - %@",oldTime,self.noteEntity.time);

        }

    }

    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

noteEntity.time が NULL から変更されたかどうかを確認する必要がありますが、if (oldTime != NULL) または if(oldTime) は機能しません。ログは次のとおりです。

CHANGE:From <null> - (null)
CHANGE:From <null> - 2013-07-29 10:15:58 +0000

私が間違っていることを見つけるのを手伝ってください。ありがとう!

4

3 に答える 3

8

<null>は の説明でありNSNullnil(またはNilまたはNULLどちらが同じであるか) の説明ではありません。試す

if (![oldTime isEqual:[NSNull null]])

代わりは。

于 2013-07-29T11:30:34.673 に答える
0

これを試して

if(yourdate){

//日付を設定する }else{ //日付を設定しない }

于 2014-05-21T06:32:10.613 に答える
0

試す

if (![oldTime isEqual:[NSNull null]]) { ... }

コンテナー内のオブジェクト (NSArray、NSDictionary など) は、目的 c で nil または null にすることはできません

于 2013-07-29T11:29:27.673 に答える