【问题标题】:Core data fetch request not working核心数据获取请求不起作用
【发布时间】:2015-10-08 18:09:42
【问题描述】:

我有 ShopItemProduct 表。 ProductShopItem 有关系。我想从ShopItem 对象中获取所有产品。我在ShopItem 类中创建了一个方法

class ShopItem: NSManagedObject {
      func fetchProducts(q: String) {
           // some code ...
          let fetchRequest = NSFetchRequest(entityName: "Product")
                fetchRequest.predicate = NSPredicate(
            format: "shopitem == %@ AND keyword == %@",
            self.objectID, String(jsonObj["keyword"])
        )
        fetchRequest.fetchLimit = 1;
        do {
           fetchResults = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Product]
    } catch {
        fatalError("Fetching from the store failed")
        }
      }
    }

在日志中它会为我生成以下 sql:

    SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZPRODUCT_TITLE, t0.ZPRODUCT_URL, 
t0.ZSHOPITEM FROM ZPRODUCT t0 WHERE ( t0.ZSHOPITEM = ? AND  
t0.ZKEYWORD = ?)  LIMIT 1

结果总是空的。

【问题讨论】:

  • jsonObj 看起来像一个全局变量。让一个类依赖外部全局并不是很好的设计。
  • 不是您的问题的答案,而是一个建议:看看MagicalRecord。它极大地减少了您在使用 Core Data 时必须编写的代码量,并且大约需要 10 分钟才能习惯:)

标签: swift core-data swift2


【解决方案1】:

如果你有关系,为什么要获取请求?如果一切设置正确,您只需按关键字过滤产品即可。

// filter by kw
let filteredProducts = shopItem.products.filter { $0.keyword == kw }

【讨论】:

  • 我没有访问产品 :( 这是我在产品型号上的关系:storage2.static.itmages.ru/i/15/1009/…
  • 从您的图片来看,设置不正确。您还需要设置反向关系。阅读 Core Data 的工作原理。
【解决方案2】:

您的 fetch 请求看起来是正确的(尽管您不需要在谓词中传递 self.objectIDself 就足够了)。当我看到神秘空虚的关系时,通常是以下两种情况之一:

  1. 您并没有像您想象的那样在创建时设置关系(或者甚至将两个实体相关联)。
  2. 您正在设置关系,但您在数据模型中配置了一对一关系而不是一对多关系,这意味着只会显示您创建的最后一个关系。

【讨论】:

  • 为了调试 Charles 提到的那种东西,我有时发现使用 XML 后备存储而不是 SQLite 存储很有用。阅读 XML 比深入研究 SQLite 表更简单(无论如何对我来说)。
【解决方案3】:

jsonObj["keyword"] 返回一个可选值。
String 表示将类似于 Optional("keywordValue")

如果值可以为 nil,则解包可选或使用可选绑定。

【讨论】:

  • > 如果值可以为 nil,则打开可选或使用可选绑定。你能解释一下吗?
  • 如果你知道字典总是包含一个键 keywordjsonObj["keyword"]!。关于可选绑定,请阅读 Swift 语言指南中的相应章节。如果你想用 Swift 编写代码,你必须了解可选的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2018-02-11
  • 2019-11-06
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多