0

저는 coreData one - many relationship과 협력하고 있습니다. 예를 들어 폴더 - 파일. 그래서 내가하고 싶은 일은 한 폴더에서 파일을 가져 와서 다른 폴더에 복사하는 것입니다.CoreData 일대 다 관계 문제

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

는 지금은 B 폴더로 폴더 A에서 파일 c 복사 할 그리고 내가 몇 가지보기 컨트롤러에 이런 일이이 코드 를 쓴이 작업을 수행하려면이 방법

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]; 
를 추출하고 일부 탐색 작업

후 열립니다

은 내가 파일의 새 인스턴스를 생성 한이 노력하고 있지만 내가 직면하고있는 문제는 내가 그에게 그것은 하나 개의 폴더에서 삭제지고 의미 이런 식으로

folder A B 
file a b 
file  d 
file  c 

를 얻고 있다는 것입니다

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]; 

다른 폴더에 추가되고 있습니다.

그래서 내가 잘못 가고 있는지 알고 싶습니다.

감사 란짓

+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

안녕하세요 @ 먼디, 두 번째 솔루션은 완벽하게 최적 인 것처럼 보입니다. 그러나 제가 언급했듯이, 일대 다 리얼리언쉽을 가지고 있기 때문에 이것을 많은 사람들에게 쉽게 바꿀 수 있습니까? – Ranjit

+0

예, 모델을 수정하고, 클래스 파일을 재생성하고 ('addFolderObject :'메소드를 제공합니다), 시뮬레이터 또는 테스트 장치에서 앱을 삭제하면 준비가 완료됩니다. – Mundi

+0

그것은 아무 것도 망가 뜨리지 않을 것입니다. 단지 .h 파일에 NSOrderedSet 폴더를 만들 것입니다. – Ranjit