Ios CoreData一对多关系问题

Ios CoreData一对多关系问题,ios,core-data,nsmanagedobject,nsmanagedobjectcontext,nsentitydescription,Ios,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,Nsentitydescription,我正在与coreData一对多关系公司合作。例如文件夹-文件。所以我想做的是从一个文件夹中取出一个文件,然后复制到另一个文件夹中 So for example folder A B file a b file c d 现在我想把文件c从文件夹A复制到文件夹B,它应该是这样的 folder A B file a b file c d file c 为了执行此操作,我编写了以下代码 这发生在某些视图控制器中,该视图控制器在某些导航操作后打开 首先,我在

我正在与coreData一对多关系公司合作。例如文件夹-文件。所以我想做的是从一个文件夹中取出一个文件,然后复制到另一个文件夹中

So for example 
folder   A  B
file     a  b
file     c  d
现在我想把文件c从文件夹A复制到文件夹B,它应该是这样的

folder A B
file   a b
file   c d
file     c
为了执行此操作,我编写了以下代码 这发生在某些视图控制器中,该视图控制器在某些导航操作后打开

首先,我在这里提取所有文件夹

 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Folder" inManagedObjectContext:self.managedObjectContext];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];
    NSError *error = nil;
    m_folderResults = [self.managedObjectContext executeFetchRequest:request error:&error];
然后我创建了一个新的文件实例

File *fileObject = [NSEntityDescription insertNewObjectForEntityForName:@"File" inManagedObjectContext:self.managedObjectContext];
    fileObject = (passed file object to this ViewController)

Folder *folderObject = [m_folderResults objectAtIndex:m_indexPath.row];

    NSMutableOrderedSet *files = [folderObject mutableOrderedSetValueForKey:@"file"];
    [files addObject:fileObject];
这是工作,但我面临的问题是,我得到它这样做

folder A B
file   a b
file     d
file     c
这意味着它将从一个文件夹中删除,并添加到另一个文件夹中

So for example 
folder   A  B
file     a  b
file     c  d
所以我想知道我错在哪里

问候
Ranjit

首先,根据您发布的代码,您正在用旧文件对象覆盖新创建的文件对象。当然,如果你在其他地方插入,它将从以前的位置消失

其次,应该澄清的是,您是否希望(1)真正复制文件
c
,即您希望创建一个新实例并将其分配给另一个文件夹,或者您(2)是否只希望第二个文件夹也指向同一个文件(如果文件不发生更改,这是有意义的)

对于案例(1),您必须

File *fileToBeCopied; 
Folder *destinationFolder;
File *newFile = [NSEntityDescription insertNewObjectForEntityForName:@"File" 
                          inManagedObjectContext:self.managedObjectContext];

// now you need to copy all the attributes of fileToBeCopied
// over to newFile

[destinationFolder addFileObject:newFile];
// or
newFile.folder = destinationFolder;
对于案例(2),确保您的数据模型允许一个文件具有多个文件夹(多对多关系)


看起来你实际上并没有复制文件。我在这里没有看到导致此问题的代码。您可以共享更多的代码吗?是不是在
fileObject=(将文件对象传递给此ViewController)
中将新创建的文件对象替换为要复制的文件对象?您可能需要复制属性,例如
fileObject.name=oldFileObject.name,…
。您好@MarkKryzhanouski,实际上这就是我写的将一个文件从一个文件夹复制到另一个文件夹的内容,我没有更多的代码要共享OK,然后澄清这意味着什么
fileObject=(将文件对象传递到此ViewController)
?@Ranjit:那么您给
文件对象分配了一个新值
?这不会复制对象。您好@Mundi,您的第二个解决方案似乎是最佳的,但正如我所提到的,我有一对多的关系,将其更改为多对多容易吗?是的,只需修改模型,重新生成类文件(这将为您提供方法
addFolderObject:
),从模拟器或测试设备中删除该应用程序,您就可以开始了。它不会破坏任何东西,只会在.h文件中创建一个文件夹集,对吗?这不起作用。您必须调整底层核心数据模型,以便将更改持久化到数据库中。好的,这会破坏我的许多代码,因为如果我使用多对多关系,我会得到一组已排序的文件夹,并且我无法访问带有fileObject的文件夹,因为它不存在。