菜鸟教程小白 发表于 2022-12-12 21:20:45

ios - 核心数据、并发和 GCD


                                            <p><p>我在尝试弄清楚如何同时正确地使用 Core Data 时遇到了困难。</p>

<p>每次有更新时,我都必须在添加新数据之前清除实体的核心数据。因此我决定使用这个片段:</p>

<pre><code>-(void)addSale:(NSArray *)results{

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    NSString *entity = @&#34;Sale&#34;;

    CoreDataManager.sharedInstance.delegate = self;

    dispatch_async(dispatch_get_main_queue(), ^{
      ;
    });

    NSManagedObjectContext *privateContext = [ initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    privateContext.parentContext = CoreDataManager.sharedInstance.managedObjectContext;

    for (NSDictionary *dataDictionary in )
    {
      NSManagedObject *managedObject = ;


      // Fill ManagedObject
      // .....

    }

    NSError *error;
    ;

    if (error != nil) {
      NSLog(@&#34;Couldn&#39;t save private context bcoz of %@\n%@&#34;, error, error.localizedDescription);
    }

    dispatch_async(dispatch_get_main_queue(), ^{
      // Save Main ManagedObjectContext
      ;
    });
});
}
</code></pre>

<p>问题是我必须为其他 2 个实体做同样的事情,同时保持 UI 响应,而不会对核心数据产生任何影响。</p>

<p>有没有更好的方法来处理这个问题?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><ol>
<li>创建一个与 <code>NSPersistentStoreCoordinator</code> 关联的私有(private)上下文。</li>
<li>删除私有(private)上下文中的对象。</li>
<li>保存私有(private)上下文。</li>
<li>如果正在使用任何这些对象,请告诉主队列上下文重置。</li>
</ol>

<p>确实没有理由删除主上下文中的对象(您似乎正在使用单例)。</p>

<p>如果您的 UI 没有触及您要删除的任何对象,那么您无需重置与用户界面关联的上下文。</p>

<p>您也可以不进行重置,而是让主队列上下文使用来自私有(private)队列上下文的保存通知,这将获得相同的结果。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 核心数据、并发和 GCD,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38421930/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38421930/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 核心数据、并发和 GCD