我的问题很奇怪,我正在寻求帮助。我想向你解释我的系统是如何工作的。我有两个问题。
我正在制作有两张桌子的应用程序。我正在使用核心数据。表是Category和Products,在核心数据中我建立了一对多关系Category可以有多个Products,Product可以hove一个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 获取名称和 site_id 并创建实体并设置这些属性
传递产品 JSON 并创建产品实体并从 JSON 的属性中设置名称和 store_id
然后是主要部分
- 现在我需要根据在步骤 3 中获得的 JSON 将产品连接到类别,这是一个问题。
我将从 JSON foreach 类别获取所有产品 site_id 作为 NSArray,我使用带有谓词和 IN 标准的 fetch 请求从具有 site_id IN 数组的上下文中获取所有产品实体。但我总是得到零结果。这很奇怪,因为我在后台线程的上下文中调用 fetch results,并且我还在第 3 步和第 4 步中更新了该上下文。
然后我尝试下一件事,在第 6 步之前,我[context save:&error]
添加了大约 30 秒的睡眠时间,当该程序运行到第 6 步之后,所有的工作都非常有趣,我的 fetch 结果获得了带有 IN 标准的谓词的产品。如果您理解我的话,这是我的第一个问题,我无法通过 ID 获取产品我需要等待大约 30 秒才能将上下文存储到 SQLLiteDB,这很奇怪。这也很奇怪,因为当我想通过 id 获取请求获取类别时,我可以毫无问题地获得它(可能是因为第 5 步大约需要一分钟)。
我的下一个问题是当我等待 30 秒然后通过 trought 类别时。基于类别 site_id 我从上下文中获取类别实体,并且在第 6 步中,我根据 JSON 获取的产品 site_id 获取所有产品并获取请求,现在我想将产品添加到类别中,然后我调用 next
[category setAllProducts:results] //结果是产品的NSSet,类别是实体对象
NSError *error = nil; [上下文保存:&错误];
我做那个foreach categroy(在步骤3中从服务器以JSON格式获取)
完成后,我在 UI 上看不到类别中的产品,我也在等待一段时间将所有数据存储在数据库中,但什么也没有,
然后当我停止应用程序并再次运行它时,我可以看到类别中的产品:(
很奇怪的问题请帮帮我我不知道我哪里错了。我可以发布部分代码,代码不小,我根据过程描述寻求帮助。
非常感谢你