多个上下文,仅在不存在的情况下创建

时间:2016-08-09 05:26:23

标签: ios sockets core-data

我有一个正在执行afnetworking请求的视图控制器,在响应时,我将该响应添加到我的主MOC并保存。 我的应用程序是一个实时应用程序,因此,执行某些类型的请求将通过长期存在的Web套接字从服务器向客户端发送消息。发生的事情是,当客户端发送单个消息时,他将通过套接字接收相同的消息(我将在稍后添加apns功能,因此他也将通过apns接收相同的功能)

我希望网络套接​​字使用背景上下文,因此我的用户界面征税较少。 现在我正在执行提取以查看数据是否已存在。如果没有,那么我将添加到上下文中。这个检查是在插座侧和api侧完成的。

我担心的是,由于它们都会以如此接近的时间间隔相互检查,它们是否可能都说数据不存在,然后两者都会添加到数据库中,导致不必要的重复?

这是我的澄清代码:

if ([Chat fetchById:[jsonBody valueForKey:@"id"] withContext:self.managedObjectContext]==nil) {
        NSLog(@"GOT NIL FROM SOCKET");

        Chat *chat = [Chat initWithContext:self.managedObjectContext];
        chat.id = [jsonBody valueForKey:@"id"];
        chat.body = [jsonBody valueForKey:@"body"];

        chat.user = [User fetchByID:[jsonBody valueForKey:@"user_id"] inContext:self.managedObjectContext];
        NSString *date = [jsonBody valueForKey:@"created_at"];
        chat.created_at = [TimeFormatter NSDateFromServerString:date];

        chat.group = [Group fetchByID:[jsonBody valueForKey:@"grp_id"] inContext:self.managedObjectContext];

        [self.managedObjectContext save:nil];
    }

0 个答案:

没有答案