0

私はcoreDataの1対多の関係で作業しています。たとえば、フォルダー - ファイル。私がやりたいことは、あるフォルダーからファイルを取得して、別のフォルダーにコピーすることです。

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で発生しています

まず、ここですべてのフォルダーを抽出しています

 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)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) の場合、データ モデルで 1 つのファイルに多くのフォルダーを含めることができること (多対多の関係) を確認してください。

[destinationFolder addFileObject:fileToBeCopied];
// or
[fileToBeCopied addFolderObject:destinationFolder];
于 2013-03-14T08:51:49.333 に答える