0

Я работаю с coreData one-to many relationship. Например, папка-файл. Так что я хочу сделать, это взять файл из одной папки и скопировать его в другую папку.Проблемы с отношением «один-ко-многим» CoreData

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

Теперь я хочу, чтобы скопировать файл с из папки A в папку B, и она должна выглядеть так

folder A B 
file a b 
file c d 
file  c 

Для выполнения этой операции я написал этот код Это происходит в некотором View 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 

означает, что он становится удален из одной папки и добавление в другую папку.

Поэтому я хочу знать, где я ошибаюсь.

С уважением Ранджит

+0

Кажется, что вы фактически не делаете копию файла. Я не вижу здесь кода, который вызвал эту проблему. Не могли бы вы поделиться еще одним кодом? –

+1

Может ли быть так, что в 'fileObject = (передан файловый объект этому ViewController) вы заменяете * вновь созданный объект файла тем, который хотите скопировать? Скорее всего, вам нужно скопировать атрибуты, например. 'fileObject.name = oldFileObject.name, ...'. –

+0

Привет @MarkKryzhanouski, на самом деле это то, что я написал для копирования одного файла из одной папки в другую, у меня больше нет кода для обмена – Ranjit

ответ

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

+0

Да, просто измените модель, восстановите файлы классов (что даст вам метод 'addFolderObject:'), удалите приложение с симулятора или тестового устройства, и вы готовы к работе. – Mundi

+0

он ничего не сломает, он просто даст создать NSOrderedSet папок в .h файлах правильно? – Ranjit

Смежные вопросы