在 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 返回零项

NSFetchRequest as entityName 给出错误“使用未声明的类型”

Xcode 8.1 核心数据获取特定属性

如何将类型应用于 NSFetchRequest 实例?

如何将类型应用于NSFetchRequest实例?