【问题标题】:In Xcode, NSFetchRequest is only returning the Objects, but not their attributes在 Xcode 中,NSFetchRequest 只返回对象,而不是它们的属性
【发布时间】: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. 时间后被释放?

标签: ios xcode core-data nsfetchrequest


【解决方案1】:

读取出现错误是正常的。故障是代表托管对象在对象图中的位置的替代或“幽灵”对象,而无需加载一堆可能永远不需要的属性数据的开销。

在您尝试访问特定托管对象的属性之一之前,您不会看到属性日志。

在您对托管对象上下文调用 save 之前,新创建的对象或对现有对象属性的更改不会保存到磁盘。

【讨论】:

    【解决方案2】:

    data: <fault> 仅表示属性尚未加载尚未。只要您访问属性,它就会从数据库中检索出来。

    【讨论】:

    • 哦,好的,但是为什么它不加载我在上次使用的会话中保存的属性:NSManagedObject *object = [self detailItem]; [object setValue:self.title forKey:@"title"]; 要保存它们,它们应该加载到标签中
    • 您确定它们没有加载吗?尝试专门打印这些属性,而不是打印整个对象。
    • 我已经打印在标签和文本字段上,但它加载了我在最初创建项目时输入的数据,而不是编辑后的值
    • 您是否在 MOC 上致电 save
    • 非常感谢,是的,就是这样......你为我省去了很多麻烦。
    猜你喜欢
    • 2022-01-23
    • 2019-12-29
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多