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