2009-10-03 5 views
4

코어 데이터 프로젝트에서는 필자의 인터페이스 (테이블)에 사람에 관한 데이터를 편집하고 db에 저장하는 두 개의 단추가 있으며 실제 저장하지 않고 시각적으로 데이터를 둘러 볼 수 있습니다 DB에. 핵심 데이터 객체를 분리하여 데이터베이스에 데이터를 쓰지 않도록하려면 어떻게해야합니까? 나는 NSManagedObject 클래스를 모방 한 새로운 NSObject 클래스를 작성하고 NSObject 클래스로 데이터를 이동하려고 시도했지만 여전히 db를 변경합니다!관리 데이터를 핵심 데이터에서 분리하는 방법은 무엇입니까?

//button for editing and saving 
PersonObj *person = (PersonObj *)[fetchedResultsController objectAtIndexPath:indexPath]; 
PersonEditViewController *editViewController = [[PersonEditViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
// puts the managed object into the new view controller 
editViewController.person = person; 
[self.viewController pushViewController:editViewController animated:animated]; 
[editViewController release]; 

//button for editing and NOT saving 
PersonObj *person = (PersonObj *)[fetchedResultsController objectAtIndexPath:indexPath]; 
PersonFiddlingViewController *fiddling = [[PersonFiddlingViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
// move db data into non-db class??? not working 
fiddling.eyeColor = person.eyeColor; 
fiddling.name = person.name; 
[self.viewController pushViewController:fiddling animated:animated]; 
[fiddling release]; 

답변

0

저는 며칠 동안 핵심 데이터를 사용했으나 (사용자 데이터를 저장하기 위해 프로젝트를 변환 한 것만) 이해가되지 않습니다. NSManagedObjectContext:save: 어딘가에서 변경 사항을 커밋하지 않는 한 어떻게 백킹 저장소 (db)가 변경 사항을 저장할 수 있습니까? 해당 메소드를 호출하는 곳에서 코드를 게시 할 수 있습니까? 아마도 당신은 실수로 다른 컨텍스트 (어쩌면 viewDidLoad: 또는 뭔가)에서 그것을하고있어.

2

나는 CD가 어떻게 작동하는지 이해하지 못합니다. CoreData에서 개체를 분리 할 수 ​​없으며 CD는 개체의 백업 저장소입니다.

첫 번째 경우에도 영구 저장소의 변경 내용을 커밋 할 코드가 없기 때문에 사용자가보고있는 문제가 위에서 언급 한 코드와 관련이 없다는 점도 확신합니다. NSManagedObjectContext:save:에 대한 호출이 없으면 객체 그래프에 대한 모든 변경 사항이 일시적입니다.

다른 말로하면, 당신이하고 싶은 것을하기 위해서 (그것을 저장하지 않고 물건을 조정하는 것), 당신이 그것을 조정 한 후에 객체가있는 문맥에 save:을 호출하지 말라. 다른 변경 사항을 저장해야하는 경우 저장하기 전에 당신은 명시 적으로 비틀기를 롤백 할 수 있습니다, 또는 당신은 그들과 함께 바이올린을 켜는 전에 자신의 상황에 쥐게 객체를 래핑 할 수 있습니다

NSManagedObjectContext *tweakingContext = [[NSManagedObjectContext alloc] init]; 
tweakingContext.persistentStoreCoordinator = person.managedObjectContext.persistentStoreCoordinator; 
PersonObj *tweakablePerson = [tweakingContext objectWithID:person.managedObjectID]; 

//Do your stuff 

[tweakingContext release]; 

위의 코드는 당신에게 새로운을 줄 것이다 person (tweakablePerson)은 사람과 같은 데이터에서 오류가 발생하지만 독립적 인 상황에서는 절대 저장하지 않습니다. 만약 당신이 그것을 저장할 수 있다면, 당신은 다른 문제들을 다루어야 할 것입니다. (다른 저장이 일어난다면 충돌을 줄일 수 있습니다).

다시 묻는 질문에 대답하는 동안 문제가 거의 확실하게 가져 오기 또는 개체 작성 코드 (표시)에 없기 때문에 문제가 해결 될 것이라고 생각하지 않지만 저장 코드 당신은 목록에 없다.

관련 문제