核心数据获取请求无效

时间:2015-10-08 18:09:42

标签: swift core-data swift2

我有ShopItemProduct个表格。 ProductShopItem有关。我想从ShopItem对象获取所有产品。我在ShopItem class

创建了一个方法
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

结果总是空的。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

jsonObj["keyword"]会返回一个可选项 String表示形式将类似于Optional("keywordValue")

如果值为nil,则打开可选项或使用可选绑定。