我是使用Swift语言进行iOS开发的新手。
我在我的应用程序中使用CoreData作为数据库选项。
我正在使用NSFetchRequest从表中获取记录。我可以从表中检索所有记录,但是我无法从同一个表中检索特定的行。 我已经在线和其他论坛检查了解决方案,但我无法为此获得适当的解决方案。
我想在Swift中实现它。我不想添加sqlite库或Bridging-wrapper(Objective-C),这将是我实现此目的的最后一个选项。
任何链接,教程或建议都会有所帮助。
答案 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
}