在 Xcode 中,NSFetchRequest 只返回对象,而不是它们的属性
Posted
技术标签:
【中文标题】在 Xcode 中,NSFetchRequest 只返回对象,而不是它们的属性【英文标题】:In Xcode, NSFetchRequest is only returning the Objects, but not their attributes 【发布时间】:2011-10-28 13:40:26 【问题描述】:我有以下代码从核心数据中获取一组“项目”(每个“项目”都有一些属性,例如“标题”、“时间”、“结束时间”、“支付”等):
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:__managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"endTime" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[__managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil)
// Handle the error.
[self setEventsArray:mutableFetchResults];
但是只返回项目而不是它们的属性:<NSManagedObject: 0x154010> (entity: Project; id: 0x1dad70 <x-coredata://85BD9DF1-B41B-4234-8397-C2F568D0CC7A/Project/p3> ; data: <fault>
我必须单独获取属性还是错过了什么?谢谢。
【问题讨论】:
__managedObjectContext 的生命周期是什么?您是否可能使用 ARC 以便 NSManagedContext 在调用 2. 时间后被释放? 【参考方案1】:读取出现错误是正常的。故障是代表托管对象在对象图中的位置的替代或“幽灵”对象,而无需加载一堆可能永远不需要的属性数据的开销。
在您尝试访问特定托管对象的属性之一之前,您不会看到属性日志。
在您对托管对象上下文调用 save 之前,新创建的对象或对现有对象属性的更改不会保存到磁盘。
【讨论】:
【参考方案2】:data: <fault>
仅表示属性尚未加载尚未。只要您访问属性,它就会从数据库中检索出来。
【讨论】:
哦,好的,但是为什么它不加载我在上次使用的会话中保存的属性:NSManagedObject *object = [self detailItem]; [object setValue:self.title forKey:@"title"];
要保存它们,它们应该加载到标签中
您确定它们没有加载吗?尝试专门打印这些属性,而不是打印整个对象。
我已经打印在标签和文本字段上,但它加载了我在最初创建项目时输入的数据,而不是编辑后的值
您是否在 MOC 上致电 save
?
非常感谢,是的,就是这样......你为我省去了很多麻烦。以上是关于在 Xcode 中,NSFetchRequest 只返回对象,而不是它们的属性的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 - NSFetchRequest 不同的结果
在我的数据模型中添加关系会导致 NSFetchRequest 返回零项