我试过几次使用获取的属性,虽然它似乎是正确的方法,但它永远不会起作用.
在我最近的尝试中,我将fetched-property添加到我的实体,选择模型中的另一个实体作为'destination',并将谓词设置为我知道有效的条件.
问题1:当生成实体的NSManagedObject类时,它不包含fetched-property的任何内容.经过一些搜索后,我在.h文件中添加了声明,在.m文件中添加了@dynamic语句(是的,我知道它是NSArray*类型).
问题2:即使在那之后,当我在代码中访问此属性时,我会抛出一个异常,说明fetch-request没有实体.我假设"实体"将被指定为"目的地",实际上它就在那里.
所以,我希望有人提供一个具体的工作示例(iOS平台),其中在模型中定义了fetched-property,在NSManagedObject派生类中声明,并实际从代码中使用.
在这一点上,我放弃了这个时间浪费,只是自己实现了获取请求代码.
该核心数据文件指出:
与[fetched]属性关联的获取请求可以具有排序顺序,因此可以对所获取的属性进行排序.
如何在Xcode的数据模型编辑器中为fetched属性指定排序描述符?我无法在任何地方找到相关领域.我正在为iPhone平台开发,如果这有任何区别.
如果通过图形模型编辑器无法实现这一点,那么如何在代码中修改fetched属性的获取请求以使其具有排序描述符?
如何在XCode的数据模型编辑器中添加一个Fetched属性,以获得一个属性的最小值?
我的模特:
型号http://www.freeimagehosting.net/uploads/b48853070e.png
Item (name, note, storedItem)
StoredItem (price, item)
Item 1 ---> N StoredITem (1->N Relationship)
Run Code Online (Sandbox Code Playgroud)
我希望Item有一个名为minPrice的fetched属性,它的值是storedItems中为price设置的最小值.
例:
Item1 (banana, storedItem1 ... storedItem4, 10)
StoredItem1 (10,item1)
StoredItem2 (15,item1)
StoredItem3 (30,item1)
StoredItem4 (54,item1)
Run Code Online (Sandbox Code Playgroud)
我在目的地放什么?StoredItem?
数据模型编辑器中的提取属性http://www.freeimagehosting.net/uploads/2a68de007d.png
我将什么表达?
数据模型编辑器中的表达式http://www.freeimagehosting.net/uploads/766ab9af6f.png
我对Core Data相对较新(来自SQLite背景).刚读完"iOS的核心数据"一书,但当我开始为具有以下型号的应用程序建模时,我留下了一些令人困惑的问题:
出于性能原因,我想对模型进行去规范化,并在"帐户"实体中添加"TotalAmountSpent"属性(如本书所示),这样我就可以在发生变化时继续更新.
在实践中,这似乎很难通过Core Data实现.我无法弄清楚如何正确地做到这一点(并且不知道正确的方法是什么).所以我的问题是:
a)我应该将'TotalAmountSpent'更改为Fetched Property吗?是否有性能影响(我知道它是懒惰加载但我几乎肯定会为每个帐户获取该属性).如果我这样做,我需要能够在给定的时间段(例如最后三天)内获得花在'startingBalance'上的总金额.这在SQL中看起来很简单,但我如何在Core Data中执行此操作?我读过我可以使用@sum聚合函数但是如何使用@sum过滤'date'?我还读了数据中的任何变化都需要刷新fetched属性.我如何'倾听'改变?我是在"付款"实体的'willSave'方法中做到的吗?
b)每次将新的付款添加到交易时,我是否应该使用传播并手动更新"TotalAmountSpent"?最好的地方是什么?我应该在重写的NSManagedObject的'willSave'方法中做到吗?我担心,如果在帐户上更新了"startingBalance"字段,更新所有相应的交易/付款将是一场噩梦.然后我必须加载每笔付款并计算花费的总金额和帐户的最终余额.如果有数千笔付款可怕
任何关于此事的指导都将非常感激.谢谢!
我有一个包含2个实体的托管对象模型.
其中一个实体(让我们称之为EA)通过引用第二个实体的子集(Call it EB)中的一些属性来计算它的属性.
在EA中我设置了一个带有谓词的"Fetched Property",它返回我需要的EB对象的子集.
当我删除,插入EB对象或更改EB对象时,我使用通知来确保EA保持最新.因此,例如在"保存"之后,EA对象将重新计算它的属性.
我的问题是,当我访问所取得的属性(我做内的EB使用模型类[self valueForKey:FetchedPropertyKeyName]),它似乎只提取缓存版本.换句话说,第一次没问题,但是当我添加另一个EA对象时,我在访问fetched属性时没有在返回的数组中看到它.当我删除一个对象时,这是最明显的,因为这个对象不再存在,导致崩溃.
Fetched Properties的文档说:
如果更改了目标实体中的对象,则必须重新评估fetched属性以确保它是最新的.您使用refreshObject:mergeChanges:手动刷新属性 - 这会导致在下次触发对象故障时再次执行与此属性关联的获取请求.
对不起,如果这听起来是一个愚蠢的问题,但不幸的是我没有看到我应该打电话到哪里refreshObject:mergeChanges:?