Core data CoreData同一对象具有不同的表示形式

Core data CoreData同一对象具有不同的表示形式,core-data,Core Data,我有一个使用CoreData的应用程序。有几个实体-用户、会话、消息。看起来是这样的: _parentMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; _parentMoc.persistentStoreCoordinator = self.persistentStoreCoordinator; _mainMoc = [[NSMan

我有一个使用CoreData的应用程序。有几个实体-用户、会话、消息。看起来是这样的:

    _parentMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    _parentMoc.persistentStoreCoordinator = self.persistentStoreCoordinator;
    
    _mainMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    _mainMoc.parentContext = _parentMoc;
    _mainMoc.automaticallyMergesChangesFromParent = YES;
    _mainMoc.undoManager = [[NSUndoManager alloc] init];

    _backgroundMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    _backgroundMoc.parentContext = _mainMoc;
    _backgroundMoc.automaticallyMergesChangesFromParent = YES;
  • 会话:(1-many)消息(会话中的消息)
  • 对话:(许多)用户(对话中的用户)
  • 消息(1-1)用户(消息的发送者)
我有一种奇怪的情况,有时消息的发送者是一个空的数据库对象,即使会话中的同一用户不是空的。我查看了两个用户对象,它们具有非常相似的URI表示:

message.user (empty)
x-coredata://68B3C0B2-8441-4BD7-BA58-358959F87947/CDUser/p7

vs:

conversation.users[0] (not empty)
x-coredata://68B3C0B2-8441-4BD7-BA58-358959F87947/CDUser/p4
我不确定p7 vs p4指的是什么,以及CoreData为什么会创建实体的副本

因此,同一数据库实体有两个版本。我的CoreData设置如下所示:

    _parentMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    _parentMoc.persistentStoreCoordinator = self.persistentStoreCoordinator;
    
    _mainMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    _mainMoc.parentContext = _parentMoc;
    _mainMoc.automaticallyMergesChangesFromParent = YES;
    _mainMoc.undoManager = [[NSUndoManager alloc] init];

    _backgroundMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    _backgroundMoc.parentContext = _mainMoc;
    _backgroundMoc.automaticallyMergesChangesFromParent = YES;

我不明白的是为什么我要复制一个实体。。。任何帮助都将不胜感激。

如果对话中包含用户,那么该用户不一定要正确发送消息?可能发送消息的用户已被删除,或者您没有正确地将该用户添加到消息中?我认为这两种情况下都是相同的用户实体,因为URI的实际ID部分是相同的。我不明白/p[x]指的是什么以及为什么不同。它们是不同的对象:“/CDUser/p7”都是唯一ID的一部分。前面的部分对同一存储中的所有对象都是通用的。p4和p7表示它们是不同的实例。UUID标识持久存储文件。