如何使用 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

如何在 Swift 中通过 MR 的 id 从 coredata 中选择一条记录

如何从coredata swift中随机选择一个元素

在 CoreData (Swift) 中存储位置