Jas*_*son 15 iphone core-data last-modified nsmanagedobject ios
除了向我的Core Data存储中的每个Entity添加NSDate属性之外,是否有一种编程方式来获取任何对象的修改日期?
Ken*_*ner 21
不,您必须添加日期并自行管理.您可以-willSave
在托管对象中使用override 来更新时间戳,但是请阅读NSManagedObject的API文档,-willSave
了解如何在不引起willSave循环的情况下进行更新(文档甚至讨论更新时间戳的情况).文档也提到了使用NSManagedObjectContextWillSaveNotification
,但设置起来可能比简单检查更麻烦,不能过快地设置时间戳.
我亲自检查是否updatedAt
被修改,如果是,那么我不再触摸它了.这样我打破了willSave
循环.
- (void)awakeFromInsert {
[super awakeFromInsert];
self.primitiveUpdatedAt = [NSDate date];
}
- (void)willSave {
[super willSave];
if(![self isDeleted] && self.changedValues[@"updatedAt"] == nil) {
self.updatedAt = [NSDate date];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案假设我们在模型中有一个名为dateUpated的属性.
而不是在单个对象处理此问题.我会通过通知来处理这个问题.Apple文档也提供了这种方式.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willSaveContext:)
name:NSManagedObjectContextWillSaveNotification
object:nil];
Run Code Online (Sandbox Code Playgroud)
- (void)willSaveContext:(NSNotification *)notification{
NSManagedObjectContext *context = [notification object];
NSSet *updatedObject = [context updatedObjects];
for (NSManagedObject *managedObject in [updatedObject allObjects]) {
if ([[managedObject.entity propertiesByName] objectForKey:@"dateUpdated"]) {
[managedObject setValue:[NSDate date] forKey:@"dateUpdated"];
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7358 次 |
最近记录: |