2012-03-31 63 views
1

我有一个名为“Records”的实体,它有一个名为NSDecimalNumber类的“量”的属性。要检索iOS Core Data中实体的一个属性的值

当然“记录”还有其他属性,如“名称”,“日期”等。

现在我需要获取的所有的“记录”来概括起来只有属性,

,以获得更好的性能我只是需要的“量”的价值,我不在乎名称或日期。

那我该怎么办?

这是我的代码,但我想他们不够专业。

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TransferRecord"]; 
request.includesSubentities = NO; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"amount"]]; 
// [request setReturnsObjectsAsFaults:NO]; // I don't know whether I shoud use this 
[request setResultType:NSDictionaryResultType]; 
NSError *error = nil; 
NSArray *temp = [self.fetchedResultsController.managedObjectContext executeFetchRequest:request error:&error]; 
if (temp) { 
//  NSDecimalNumber *allTrans = [NSDecimalNumber zero]; 
//  for (NSDecimalNumber *one in [temp valueForKey:<#(NSString *)#>) 
    NSLog(@"%@",[temp description]); 

而我不清楚“故障”是什么意思。

回答

2

伊诺,

你怎么知道的标准提取不适合您的需求不够快?您是否使用工具将问题确定为提取问题? (我问,因为使CD应用运行得更快的标准方式,特别是在iOS上,通过使用更简单的谓词来获取更多数据,然后使用对RAM中的项目进行设置操作来优化查询。)

如果您认为关于它,你会明白为什么。行存储在磁盘上的连续字节中。这些行可以经常在同一个磁盘块中找到。因此,单个提取可能会获得很多行。磁盘读取是任何数据库查询的缓慢部分。在iOS上,闪光灯非常慢。它不是为高性能分散收集数据库操作而设计的。 IOW,iOS设备不是,而SSD是它自己的操作系统。顺便说一句,Flash上​​的提取会将128k-256k字节带入缓冲区。因此,获得更多的行很容易,而且相对较快。

上面的代码基本上是正确的。

您需要阅读有关Core Data故障的文档。这是该系统的一个基本概念。苹果的文档对错误的性质非常清楚。堆栈溢出是要求在任何系统文档中涵盖的基本信息的错误地方。

Andrew

+0

非常感谢!这是......教学。 – 2012-04-02 14:33:32

+0

Eno,作为新用户,您可能不知道有一个协议接受答案。这有利于那些花时间回答你的问题的人。因此,如果您发现我的答案有用并且完整,那么您是否请检查我上面的答案旁边的复选标记? (在我的回答开始时,它紧挨着上下箭头。)安德鲁 – adonoho 2012-04-03 14:19:23

相关问题