0

我正在处理 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

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

所以我想知道我哪里出错了。

问候兰吉特

4

1 回答 1

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];
于 2013-03-14T08:51:49.333 回答