我的问题很奇怪,我正在寻求帮助。我想向您解释我的系统是如何工作的。我对此有两个问题。
我正在制作有两个表的应用程序。我正在使用核心数据。表格是类别 and Products,在核心数据中我建立了一对多的关系Category可以有多个Products, Product可以拥有一个Categroy.
这是基本架构
Category {
site_id
name
allProducts ->> Product
}
Product {
site_id
name
category -> Category
}
- 这是简化模型产品,catwegories 有更多属性
在该应用程序中,我有更新过程,并且该过程在后台线程中工作。我已经为该线程创建了上下文,并且我在该上下文中存储了所有更改。
我在后台线程中执行的所有计算
[context performBlock:^{
// all my operations for updating storing categories and products
}]
这是更新过程的流程
- 从服务器获取带有类别数据的 JSON
- 从服务器获取带有产品数据的 JSON
从服务器获取 JSON,其中包含哪个类别有哪些产品的信息array((category_site_id > array(product_site_id1, product_site_id2...))
传递类别 JSON 并存储类别实体,我从 JSON 获取 name 和 site_id 并创建实体并设置这些属性
传递产品 JSON 并创建产品实体并从 JSON 的属性设置 name 和 store_id
然后是主要部分
- 现在我需要根据步骤 3 中获得的 JSON 将产品连接到类别,这是一个问题。
我将从 JSON 获取每个类别并获取所有产品 site_id 作为 NSArray,我使用带有谓词和 IN 标准的获取请求来获取所有产品products上下文中具有 site_id IN 数组的实体。但我总是得到零结果。这很奇怪,因为我在后台线程的上下文中调用获取结果,并且我还在步骤 3 和 4 中更新了该上下文。
然后我尝试下一步,在步骤 6 之前[context save:&error]
并添加了大约 30 秒的睡眠,当该程序运行到步骤 6 后,所有工作都非常有趣,我的获取结果得到了带有 IN 标准谓词的产品。这是我的第一个问题,如果你理解我的话,我无法通过 ID 获取产品,我需要等待大约 30 秒才能将上下文存储到 SQLLiteDB,这很奇怪。这也很奇怪,因为当我想通过 id 获取具有提取请求的类别时,我可以毫无问题地获取它(也许是因为步骤 5 大约需要一分钟)。
我的下一个问题是当我等待 30 秒然后通过槽类别时。基于类别 site_id,我从上下文中获取类别实体,并且在步骤 6 中,我根据 JSON 和获取请求获取的产品 site_ids 获取所有产品,现在我想将产品添加到类别,然后调用 next
[category setAllProducts:results] // results是product的NSSet,category是实体对象
NSError *错误= nil;
[上下文保存:&错误];
我对每个类别都这样做(在步骤 3 中从服务器获取 JSON 格式)
完成所有操作后,我在 UI 上看不到类别中的产品,我还等待一段时间将所有数据存储在数据库中,但没有任何反应,
然后当我停止应用程序并再次运行它时,我可以看到类别中的产品:(
很奇怪的问题请帮帮我我不知道我哪里错了。我可以发布部分代码,代码并不小,我根据流程描述寻求帮助。
非常感谢