2015-04-03 44 views
0

我使用的核心数据,看是否在表视图中的消息已被用户看到过。我这样做的方式是消息ID保存到核心数据第一次看到,然后我跑的时候我更新表视图,查看是否有在持久性存储器具有相同ID的条目的读取请求。 现在我想知道的是我应该如何最有效地实现我的读取请求的基础上,耗时有多。我应该要么运行,返回所有已保存的消息ID为阵列的视图加载时的请求,然后在cellForRowAtIndexPath检查如果数组包含电池的消息ID,或运行在cellForRowAtIndexPath谓词获取请求?后者将是我的首选方法,但如果我有100左右的单元格,我想知道这是否是礼仪差。 任何帮助将非常感激。的iOS核心数据读取请求时,如何使用

这是我取请求:

func persistQuery(predicateValueString: String!) -> Bool! { 

let fetchRequest = NSFetchRequest(entityName: "LogItem") 
let predicate = NSPredicate(format: "itemText == %@", predicateValueString) 

fetchRequest.predicate = predicate 

var didFindResult = true 

if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [LogItem] { 

    if fetchResults.count == 0 { 
     didFindResult=false 
    } 
} 

return didFindResult 

}

+0

尝试您的两个选项和配置文件,看看哪一个最好的(通常是除非你预期的条件下进行测试时,观察问题不必担心它)的有益响应 – Wain 2015-04-03 21:52:36

回答

0

最好的办法是使用NSFetchedResultsController。它会优化取回和内存占用。它是专门为表格视图设计的。

要开始,看看Xcode的模板(主/详细信息,请查看核心数据)。这真的很简单。

确保你还实现了委托方法 - 当你的托管对象发生变化时,它们将自动被调用,所以只有很少的代码被执行来更新UI(只有当对象实际上在屏幕上时)。

大概你的每个表格视图单元格都代表一个LogItem(NSManagedObject子类),它带有一个属性以指示read状态。一旦你改变了它,委托方法将尝试根据索引路径对其进行更新。

就是这样。使用获取的结果控制器可以免费获得大量优化,所以我强烈建议每当使用Core Data实体填充表视图时使用它。

+0

谢谢,但是我没有实际使用存储的数据填充表格。数据源来自我们的后端,但为了保持我的服务器请求低我在设备本身存储读取状态 – TimWhiting 2015-04-04 00:14:29

+0

我明白了。您应该确保将数据显示在设备中,而不仅仅存储在内存中。上述方案是适当的。无论如何,你都要解析邮件的全部文本。也许如果你只有ids,你可以减少它,但如果你可以在本地保存数据,UX可能会更好。 – Mundi 2015-04-04 09:24:21