【发布时间】:2014-08-25 08:24:26
【问题描述】:
我目前正在使用MSCollectionViewLayout。原始的coredata模型是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".
在 Core Data 模型中添加“day”属性可以解决问题。
所以我的问题是:我认为 NSManagedObject 的瞬态属性可以提供额外的访问器,而无需保留实际值,就像类别一样。那么为什么我在尝试保存托管对象时会收到此错误?
【问题讨论】:
标签: ios objective-c core-data nsfetchedresultscontroller nsmanagedobject