代码之家  ›  专栏  ›  技术社区  ›  addlistener

如何将瞬态属性与重写的NSManagedObject一起使用?

  •  0
  • addlistener  · 技术社区  · 11 年前

    我当前正在使用 MSCollectionViewLayout 。原始的核心数据模型是Event,它描述了一个瞬态属性“day”

    //MSEvent.h
    @interface MSEvent : NSManagedObject
        @property (nonatomic, strong) NSDate *start;
        - (NSDate *)day; // Derived attribute to make it easy to sort events into days by equality
    @end
    
    
    //MSEvent.m
    - (NSDate *)day
    {
        return [self.start beginningOfDay];
    }
    

    原始代码使用RestKit,同时用瞬时属性“day”分隔部分。

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
        managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext 
        sectionNameKeyPath:@"day" 
        cacheName:nil];
    

    这工作得很好。


    我的问题是:我使用自己的ManagedObjectContext而不是RestKit

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
        managedObjectContext:self.managedObjectContext 
        sectionNameKeyPath:@"day" 
        cacheName:nil];
    

    我会在某处更新事件

    event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext];
    [event setValue:eventData[@"startDate"] forKey:@"start"];
    [managedObjectContext save:nil]; // here the problem occurs
    

    我在最后一行收到错误消息:

    CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  [<NSManagedObject 0x9386a50> valueForUndefinedKey:]: the entity Event is not key value coding-compliant for the key "day".
    

    在核心数据模型中添加“day”属性可以解决问题。


    所以我的问题是:我认为NSManagedObject的瞬时属性可以提供额外的访问器,而无需持久化实际值,就像类别一样。那么,为什么在尝试保存托管对象时会出现此错误?

    1 回复  |  直到 11 年前
        1
  •  0
  •   addlistener    11 年前

    我自己解决了这个问题:我忘记在数据模型检查器中添加类。