【问题标题】:How to get specific row data from the CoreData sqlite table using Swift如何使用 Swift 从 CoreData sqlite 表中获取特定的行数据
【发布时间】:2015-03-11 12:43:05
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ios iphone swift core-data


    【解决方案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,感谢您的示例。这非常有用。
    猜你喜欢
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多