2

我在 CoreData 中创建了一个名为“NoteEntity”的实体并生成 NSManageObject 子类

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

然后我添加观察者来检查选择对象时的时间变化:

[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>是 的描述NSNull,而不是nil(或NilNULL相同)的描述。尝试

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

反而。

于 2013-07-29T11:30:34.673 回答
0

尝试

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

容器中的对象(NSArray、NSDictionary 等)在目标 c 中不能为 nil 或 null

于 2013-07-29T11:29:27.673 回答
0

尝试这个

if(yourdate){

//设置日期 }else{ //不设置日期 }

于 2014-05-21T06:32:10.613 回答