gpt4 book ai didi

ios - CoreData一对多关系问题

转载 作者:行者123 更新时间:2023-11-29 04:04:59 26 4
gpt4 key购买 nike

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

为了执行此操作,我编写了这段代码这发生在一些 View Controller 中,该 Controller 在一些导航操作后打开

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

 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

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

所以我想知道我哪里出了问题。

问候兰 git

最佳答案

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

其次,应该澄清一下,如果您想要 (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];

关于ios - CoreData一对多关系问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15403753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com