有没有人有核心数据中的fetched-property的工作示例?

时间:2011-09-08 00:14:00

标签: iphone objective-c ios core-data fetched-property

我尝试过多次使用获取的属性,虽然它似乎是正确的方法,但从不有效。

在我最近的尝试中,我将fetched-property添加到我的实体,选择模型中的另一个实体作为'destination',并将谓词设置为我知道有效的条件。

问题1:当生成实体的NSManagedObject类时,它不包含fetched-property的任何内容。经过一些搜索后,我在.h文件中添加了声明,在.m文件中添加了@dynamic语句(是的,我知道它是NSArray *类型)。

问题2:即使在那之后,当我在代码中访问此属性时,我会抛出一个异常,说明fetch-request没有实体。我假设“实体”将被指定为“目的地”,实际上它就在那里。

所以,我希望有人提供一个具体的工作示例(iOS平台),其中在模型中定义了fetched-property,在NSManagedObject派生类中声明,并且实际上是从代码中使用的。

此时我放弃了这个时间浪费,只是自己实现了获取请求代码。

3 个答案:

答案 0 :(得分:26)

这是我的相关代码位(包括你已经提到的位):

我的示例有一个'卡'对象,与'统计'对象有1>多个关系。每个'Stats'对象都有一个'结果',可以是1-4。我的获取属性是一个简单的属性,可以为我的“卡片”对象提供一系列“结果”对象,这些对象只有'结果'= 1。

我想使用fetched属性,这样我就可以轻松掌握具有超过一定数量和类型的'Stats'对象的'Card'对象。

因此,在'Card'对象中,我将Fetched Property'statsOfTypeOne'与Destination设置为'Stats'。

在这个获取属性的谓词中我放了

(SELF.outcome=1) AND (SELF.card=$FETCH_SOURCE)

'SELF'是'stats'记录,$ FETCH_SOURCE在执行时神奇地成为'Card'对象。

正如您所做的那样,我将以下内容放在'Card'对象的.h和.m文件中:

@property (nonatomic, retain) NSArray *statsOfTypeOne;
@dynamic statsOfTypeOne;

然后在我使用的代码中:

[self.managedObjectContext refreshObject:cardInstance mergeChanges:YES];
[cardInstance valueForKey:@"statsOfTypeOne"]

获取数组(虽然cardInstance.statsOfTypeOne应该没问题)。如果没有刷新对象,则不会更新Fetched属性(根据手册)。

认为这就是我为使其发挥作用所做的一切。让我知道它是否适合你。

彼得

答案 1 :(得分:5)

添加@ Peter的回答。以下是我如何使用Swift 2.0和Xcode 7:

import Foundation
import CoreData

@objc(Card)
class Card: NSManagedObject {

    @NSManaged var statsOfTypeOne: [Stat]

}

然后,阅读获取的属性:

managedObjectContext.refreshObject(someCard, mergeChanges: true)
// This works and returns [Stat] type
someCard.statsOfTypeOne
// So does this
someCard.valueForkey("statsOfTypeOne") as! [Stat]

答案 2 :(得分:2)

您是否看过上一个问题:Xcode 4 Core Data: How to use fetched property created in Data Model editor

阅读已接受的答案和所有评论。这听起来好像已经整理好了。