如何使用 Swift 从 CoreData sqlite 表中获取特定的行数据
Posted
技术标签:
【中文标题】如何使用 Swift 从 CoreData sqlite 表中获取特定的行数据【英文标题】:How to get specific row data from the CoreData sqlite table using Swift 【发布时间】:2015-03-11 12:43:05 【问题描述】:我是使用 Swift 语言进行 ios 开发的新手。
我在我的应用程序中使用 CoreData 作为数据库选项。
我正在使用 NSFetchRequest 从表中获取记录。我可以从表中检索所有记录,但无法从同一个表中检索特定行。 我已经检查了在线和其他论坛的解决方案,但我无法找到合适的解决方案。
我只想在 Swift 中实现它。我不想添加 sqlite 库或 Bridging-wrapper (Objective - C),这将是我实现此功能的最后一个选项。
任何链接或教程或建议都会有所帮助。
【问题讨论】:
【参考方案1】:NSFetchRequest 也支持 NSPredicate。使用 NSPredicate,您可以从 Core Data 中选择您需要的确切行或行。
更多关于 NSPredicate - https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/
【讨论】:
嗨帕维尔,感谢您的链接。这非常有用。【参考方案2】:您可以通过执行获取请求、将其转换为数组并简单地使用下标来检索索引来获取所需的行。或者,您可以使用唯一 id 和谓词来缩小结果范围,并在索引 0 处获取对象。
if let results = managedObjectContext?.executeFetchRequest(fetchRequest, error: nil) as? [SomeClass]
let someObject = results[someIndex]
【讨论】:
您好 Bluehound,感谢您的示例。这非常有用。【参考方案3】:正如 Pavel 所说,使用 NSPredicate。这是我的代码中的一个工作示例,它可能会帮助您入门;)我在相关行下方添加了一些 cmets
var req = NSFetchRequest(entityName: "YourDBTable")
// your db-table goes here
req.sortDescriptors = [NSSortDescriptor(key: "timeMillis", ascending: true)]
// if you want to sort the results
let start = NSNumber(longLong:int64StartValue)
// you need to convert your numbers to NSNumber
let end = NSNumber(longLong:int64EndValue)
let pred = NSPredicate(format:"timeMillis>=%@ AND timeMillis <=%@ AND foreignTableObject=%@",start,end, foreignTableObject)
// if you have relationships, you can even add another NSManagedObject
// from another table as filter (I am doing this with foreignTableObject here)
req.predicate = pred
var fetchedResults = managedContext?.executeFetchRequest(req,error: &error) as! [YourDBTable]?
// YourDBTable-class was created using the Xcode data model -> Editor -> Create NSManagedObject SubClass... - option
if let results = fetchedResults
// iterate through your results
【讨论】:
您好 Compufreak,感谢您的示例。这非常有用。以上是关于如何使用 Swift 从 CoreData sqlite 表中获取特定的行数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swift 的后台线程中从 CoreData 中获取未保存的数据?
如何使用 Swift 删除 coredata 中的特定记录?
如何使用 swift 在 iOS coredata sqlite 中启用 DELETE MODE