我有一個場景,我懷疑是很常見的,我發現了其他類似問題的各種想法,包括設置IBOutlets,將NSmanagedobjects作爲屬性傳遞,並使用一個視圖控制器,但交換了意見,但我不確定哪個將是實現我的解決方案的最佳想法。在視圖控制器之間傳遞數據/對象/ moc - 最佳實踐
我有一個具有典型模型的iOS/iphone應用程序。包含多個UINavigationControllers的UITabBarController。
在其中一個導航控制器中,我有一個帶有tableView的viewcontroller。這個tableView是從提取的核心數據實體中填充的,叫做'tags'。當我使用UIBarButtonItem(Add)設置tableView時,add按鈕的行爲如下所示:我需要爲該實體創建一個新的'tag'對象,並用一些已知數據填充對象,然後提示用戶鑽取下拉3級分類(區域 - >區域 - >主題)以達到主題對象。然後我需要將'主題'對象添加到原來新添加的'標記'對象(3層視圖下方的視圖)的關係中。 - 希望清楚。
(有大量的代碼我不知道該位呈現所以我描述了現在的主要片段,通過各種手段讓我知道你想看到的任何特定代碼。)
- (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代碼傳遞選定的行和這個'標記'對象到下一個視圖,我不確定這是否是正確的,因爲我不知道當我到達第三個視圖上的主題對象時該怎麼辦? ??我迷路了。
總是有不止一種方法去皮膚貓,但我應該從哪些方法來解決這個問題。我應該向前傳遞'標記'對象並將其保存在第三個視圖中,還是傳回選定的主題並將其保存在創建'標記'對象的原始視圖中?
非常感謝提前。
謝謝@eduardo,我以前沒有使用NSNotifcations - 我將有一個閱讀,看看我如何。我想我有幾個問題需要解決,如果用戶從來沒有真正進入postNotification,那麼默認行爲是什麼,觀察者只是坐着聽,直到卸載,什麼時候我會應用removeObserver等等 - 我會玩。 - 感謝您花時間表達您的想法。 – Barry
我認爲我會嘗試的方法是從UIBarButtonAdd按鈕開始鑽取(無需先創建 – Barry
oops! - 我認爲我會嘗試的方法是從列表視圖上的UIBarButtonAdd按鈕開始下鑽(無需先創建新對象),允許用戶按照深入VC進行操作,最後在用戶選擇時在UserInfo中傳遞主題對象的postnotification主題。帶有UIButtonBarAdd的VC將在viewDidLoad中的SetObserve和viewDidUnload中的removeObserve。 HandleTopicSelected:方法將創建新的對象來填充它並保存上下文。聽上去怎麼樣?我留下了如何關閉3VC讓用戶回到列表視圖。 – Barry