1

나는 매우 일반적인 것으로 의심되는 시나리오가 IBOutlets 설정, 속성으로 NSmanagedobjects 전달 및 하나만 사용하여 비슷한 질문에 대한 다양한 아이디어를 발견했습니다. 컨트롤러를 보았지만 뷰를 교환하는 것이지만 내 솔루션을 위해 구현할 가장 좋은 아이디어는 무엇인지 확실하지 않습니다.viewcontrollers 사이의 데이터/개체/moc 전달 - 모범 사례

나는 전형적인 모델을 가진 iOS/iphone 앱이 있습니다. 여러 UINavigationController가 포함 된 UITabBarController.

내 탐색 컨트롤러 중 하나에서 tablecontroller가있는 viewcontroller가 있습니다. 이 tableView는 가져온 핵심 데이터 엔터티에서 채워집니다 '태그'라고합니다. UIBarButtonItem (Add)으로 tableView를 설정할 때 추가 버튼은 다음과 같이 동작해야합니다. 개체에 대한 새로운 '태그'개체를 만들고 일부 알려진 데이터로 개체를 채우고 사용자에게 드릴하라는 메시지가 필요합니다. topic 객체에 도달하기 위해 3 가지 분류 수준 (Region -> area - topic)을 내립니다. 그런 다음 원래 '새로 추가 된'태그 '객체 (스택 아래로 3 뷰)의 관계에'topic '객체를 추가해야합니다. - 그게 분명해.

(코드 많이 거기에 내가 그래서 난 내가 당신이보고 싶은 특정 코드를 알려 부디, 주요 조각으로 지금 설명하고있어 제시하는 비트를 모르겠어요.)

- (void)addTag {  

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; 
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 
[newManagedObject setValue:@"(untitled)" forKey:@"tagID"]; 

NSError *error; 
if (![context save:&error]) 
    NSLog(@"Error saving entity: %@", [error localizedDescription]); 


ChooseRegion *aView = [[[ChooseRegion alloc] init] autorelease]; 
aView.theTag = newManagedObject; 

[self.navigationController pushViewController:aView animated:YES]; 

} 

개체를 만들고 속성 중 하나를 값으로 설정하고 저장 한 다음 개체를 다음 뷰 (chooseRegion)로 전달한 것을 볼 수 있습니다.이 개체는 3 가지보기 중 첫 번째보기입니다. 각각의 didSelectRowAtIndexPath 코드에서 선택한 행과이 '태그'객체를 다음보기로 전달합니다. 세 번째보기에서 주제 객체에 도달 할 때 무엇을해야할지 확신 할 수 없기 때문에 이것이 올바른지 확실하지 않습니다. ?? 나는 길을 잃었다.

항상 고양이를 피우는 한 가지 방법이 있지만이 문제를 해결해야하는 방법은 무엇입니까? '태그'객체를 전달하여 세 번째보기에 저장하거나 선택한 주제를 다시 전달하고 '태그'객체를 만든 원래 뷰에 저장해야합니까?

미리 감사드립니다.

답변

2

알림을 사용합니다. 알림은 응용 프로그램의 일부분을 분리하는 간단한 방법이지만 여전히 함께 작동하게합니다. 귀하의 경우에는

, 사용자가 3보기에서 태그 객체를 선택하는 순간, 나는 같은 통지를 보낼 것입니다 :

[[NSNotificationCenter defaultCenter] postNotificationName:@"tagSelected" object:myTag]; 

을 이제 "추가"버튼이 컨트롤러에 만들

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTagSelected:) name:@"tagSelected" object:nil]; 

당신이 handleTagSelected 구현해야합니다 : 그것은 해당 이벤트에 가입 방법 및 그 방법에 당신은 태그 객체를 얻고 열려있는 드릴 다운 뷰 닫을 수 있습니다 :

그런 다음 태그로 원하는대로 할 수 있습니다.

+0

감사합니다. @ eduardo, 전에 NSNotifcations를 사용하지 않았습니다. 나는 주위를 읽고 어떻게되는지 알아 보겠습니다. 사용자가 실제로 postNotification에 도착하지 않는다면 관찰자는 언로드 될 때까지 앉아 있어야하며, removeObserver를 적용하면 언제든지 재생할 수 있습니다. - 시간을내어 주셔서 감사합니다. – Barry

+0

내가 시도 할 것 접근법은 UIBarButtonAdd 버튼에서 드릴을 시작하는 것입니다 (먼저 – Barry

+0

을 작성하지 않고!- 내가 시도해 볼 접근법은 목록 뷰의 UIBarButtonAdd 버튼에서 드릴 다운을 시작하는 것입니다 (처음에는 새 객체를 만들지 않고). 드릴 다운 VC를 따라갈 수 있고 마지막에는 사용자가 선택할 때 사용할 수 있습니다. Postinotification에 주제가 UserInfo에 주제 객체를 전달합니다. UIButtonBarAdd가있는 VC는 viewDidLoad의 SetObserve와 viewDidUnload의 removeObserve입니다. HandleTopicSelected : 메서드는 새 객체를 만들어 객체를 채우고 컨텍스트를 저장합니다. 어떻게 들리니? 3VC를 닫아 사용자를 목록보기로 되돌려 놓을 방법이 남아 있습니다. – Barry