如何使用Swift从CoreData sqlite表中获取特定的行数据

时间:2015-03-11 12:43:06

标签: ios iphone swift core-data

我是使用Swift语言进行iOS开发的新手。

我在我的应用程序中使用CoreData作为数据库选项。

我正在使用NSFetchRequest从表中获取记录。我可以从表中检索所有记录,但是我无法从同一个表中检索特定的行。 我已经在线和其他论坛检查了解决方案,但我无法为此获得适当的解决方案。

我想在Swift中实现它。我不想添加sqlite库或Bridging-wrapper(Objective-C),这将是我实现此目的的最后一个选项。

任何链接,教程或建议都会有所帮助。

3 个答案:

答案 0 :(得分:5)

NSFetchRequest也支持NSPredicate。使用NSPredicate,您可以从Core Data中选择您需要的行或行。

有关NSPredicate的更多信息 - https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/

答案 1 :(得分:0)

您可以通过执行获取请求,将其作为数组转换,并使用下标来检索索引来获取所需的行。或者,您可以使用唯一的id和谓词缩小结果范围,并将对象设置为索引0。

if let results = managedObjectContext?.executeFetchRequest(fetchRequest, error: nil) as? [SomeClass] {
    let someObject = results[someIndex]
}

答案 2 :(得分:0)

正如帕维尔所说,使用NSPredicate。这是我的代码中的一个工作示例,它可能会帮助您开始;)我在相关行下面添加了一些注释

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
}
相关问题