小编Mil*_*nić的帖子

核心数据多线程商店关系

我的问题很奇怪,我正在寻求帮助.我想向您解释我的系统是如何工作的.我有两个问题.

我正在制作有两张桌子的应用程序.我正在使用核心数据.表是分类产品,在核心数据中我建立了一对多的关系类别可以有多个产品,产品可以有一个分类.

这是基本架构

Category {
  site_id
  name
  allProducts ->> Product
}

Product {
  site_id
  name
  category -> Category
}
Run Code Online (Sandbox Code Playgroud)
  • 这是简单的模型产品和catwegories有更多的属性

在该应用程序中,我有更新过程,该过程在backgournd线程中工作.我已经为该线程创建了上下文以及我在该上下文中存储的所有更改.

我在后台线程中执行的所有caluclation

[context performBlock:^{
  // all my operations for updating storing categories and products
}]
Run Code Online (Sandbox Code Playgroud)

这是更新过程的流程

  1. 从服务器获取带有类别数据的JSON
  2. 从服务器获取JSON与产品数据
  3. 从服务器获取JSON信息哪个类别有哪些产品 array((category_site_id > array(product_site_id1, product_site_id2...))

  4. 通过类别JSON和商店类别实体,我从JSON获取name和site_id并创建实体并设置这些属性

  5. 传递产品JSON并创建产品实体,并从JSON中的属性设置name和store_id

然后是主要部分

  1. 现在我需要根据步骤3中的JSON将产品连接到类别,这是一个问题.

我从JSON转到foreach类,并将所有产品site_id作为NSArray,我使用带有谓词和IN条件的获取请求来从上下文中获取具有site_id IN数组的所有产品实体.但我总是得到零结果.这很奇怪,因为我在后台线程中调用上下文中的fetch结果,并且我还在步骤3和4中更新了该上下文.

然后我尝试接下来的事情,在第6步之前我[context save:&error]加入睡眠约30秒,当程序运行到第6步之后,所有工作都很好,我的获取结果得到带有IN标准的谓词的产品.这是我的第一个问题,如果你了解我,我无法通过ID获取产品,我需要等待大约30秒才能将上下文存储到SQLLiteDB,这很奇怪.这也很奇怪,因为当我想通过id获取带有获取请求的类别时,我可以毫无问题地得到它(可能是因为第5步需要大约一分钟).

我的下一个问题是,当我等待30秒,然后通过各种类别.基于类别site_id,我从上下文获取Category实体,并且在步骤6中,我获得所有产品基于由JSON和获取请求生成的产品site_ids,现在我想将产品添加到类别,我打电话给下一个

[category setAllProducts:results] //结果是产品的NSSet,类别是实体对象

NSError*error = nil; [上下文保存:&错误];

并且我做了foreach类(从服务器以JSON格式在步骤3中执行)

当一切都完成后,我无法在UI上看到类别中的产品我也在等待一段时间将所有数据存储在数据库中,但没有任何内容,

然后,当我停止应用并再次运行时,我可以看到类别中的产品:(

很奇怪的问题请帮帮我,我不知道我哪里错了.我可以发布部分代码,代码不小,我根据流程描述寻求帮助. …

multithreading entity-relationship core-data ios ios5

5
推荐指数
1
解决办法
2202
查看次数