0

我正在使用coreData一对多关系。例如文件夹 - 文件。所以我想要做的是从一个文件夹中取出一个文件并将其复制到另一个文件夹中。CoreData一对多关系问题

So for example 
folder A B 
file  a b 
file  c d 

现在我想从文件夹中的文件拷贝C到文件夹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 

这意味着它正从一个文件夹中删除并添加到另一个文件夹。

所以我想知道我要去哪里错了。

问候 兰吉特

+0

看起来你并没有真的在做文件复制。我在这里看不到导致此问题的代码。你能分享一些更多的代码吗? – 2013-03-14 08:12:07

+1

难道是在'fileObject =(传递给这个ViewController的文件对象)'你*用新的文件对象替换你想复制的文件对象?您可能需要复制这些属性,例如'fileObject.name = oldFileObject.name,...'。 – 2013-03-14 08:32:50

+0

嗨@MarkKryzhanouski,实际上这是我写了一个文件从一个文件夹复制到另一个,我没有更多的代码分享 – Ranjit 2013-03-14 08:45:42

回答

1

首先,根据您发布,要覆盖你的旧文件对象新创建的文件对象的代码。当然,如果你在其他地方插入它,它将从之前的地方消失。其次,如果你想(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),确保您的数据模型允许一个文件有很多文件夹(许多一对多的关系)。

[destinationFolder addFileObject:fileToBeCopied]; 
// or 
[fileToBeCopied addFolderObject:destinationFolder]; 
+0

嗨@Mundi,你的第二个解决方案似乎是最佳的,但正如我所提到的那样,我拥有一对多的实用性,很容易将它变为多对多? – Ranjit 2013-03-14 08:57:03

+0

是的,只需修改模型,重新生成类文件(它会给你方法'addFolderObject:'),从模拟器或测试设备中删除应用程序,然后就可以开始了。 – Mundi 2013-03-14 09:01:38

+0

它不会破坏任何权利,它只会给在.h文件中创建文件夹的NSOrderedSet权利? – Ranjit 2013-03-14 09:11:03