Xcode 4 Core Data:如何使用在数据模型编辑器中创建的获取属性

Posted

技术标签:

【中文标题】Xcode 4 Core Data:如何使用在数据模型编辑器中创建的获取属性【英文标题】:Xcode 4 Core Data: How to use fetched property created in Data Model editor 【发布时间】:2011-06-26 21:21:03 【问题描述】:

如何在 Xcode 4 中实现获取的属性?

下面是两个实体的示例,一本书和一个页面:

我按照此处的指南创建了一个提取的属性,该属性使用变量 $FETCH_SOURCE 引用来自源实体的值:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html

现在,一旦我保存了这个并生成了源代码,我就会得到这个:

//  Book.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Pages;

@interface Book : NSManagedObject 
@private

@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSNumber * pageCount;
@property (nonatomic, retain) Pages * pages;

@end

还有……

//  Book.m

#import "Book.h"
#import "Pages.h"


@implementation Book
@dynamic title;
@dynamic pageCount;
@dynamic pages;

@end

获取的属性“fetchLastPage”在哪里?如何在代码中使用它?

【问题讨论】:

仅供参考,这不是我正在使用的实际代码。我正在编写一个应用程序,其中有多个数据存储(一个用于只读,一个用于用户保存的数据),我需要使用获取的属性,因为多个存储之间不保持关系:developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 【参考方案1】:

根据我的阅读,您需要使用 @dynamic 关键字自己将获取的属性添加到生成的类中

// In your header
@property (nonatomic, retain) NSArray *fetchLastPage;

// In your class
@dynamic fetchLastPage;

【讨论】:

+1 你的基本想法是正确的,但获取的属性始终属于 NSArray 类。我将编辑您的答案以反映这一点。 我要补充一点,您必须手动执行此操作,因为 X4 Core Data 工具存在严重错误。在以前的版本中,它会自动添加 fetchedProperty 定义。 @TechZen - 你应该向 Apple 提交错误报告。 谢谢大家,我会在今天晚些时候尝试后接受这个答案。有谁知道获取属性的良好参考?我看过 3 部关于 Core Data 的不同书籍(可能是仅有的 3 部关于 Core Data 的书籍)并且严重缺乏提及如何处理获取的属性和利用多个商店。我还没有看到任何关于如何使用 fetched-properties 在分布在多个商店的实体之间保持松散关系的示例。 @pokstad -- 好吧,我知道早期版本之一就是这样做的。获取的属性并不复杂,它们只是获取的对象数组。唯一真正的问题是,只有在对象第一次出现故障时才会运行提取。之后,您需要调用 refreshObject:mergeChanges: 以使其刷新。

以上是关于Xcode 4 Core Data:如何使用在数据模型编辑器中创建的获取属性的主要内容,如果未能解决你的问题,请参考以下文章

如何清除和重置 Core Data 数据模型

Xcode Entity Core Data - NSDate 错误的年份? [复制]

使用 XCode 8 中 Core Data 生成的类创建对象数组

使用 xcode 和 core-data 中的代码创建托管对象

使用 Swift 和 XCode 在 Core Data 中存储整数

如何在不丢失数据的情况下更改 Core Data SQLite 数据库的结构