1

我有一個場景,我懷疑是很常見的,我發現了其他類似問題的各種想法,包括設置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代碼傳遞選定的行和這個'標記'對象到下一個視圖,我不確定這是否是正確的,因爲我不知道當我到達第三個視圖上的主題對象時該怎麼辦? ??我迷路了。

總是有不止一種方法去皮膚貓,但我應該從哪些方法來解決這個問題。我應該向前傳遞'標記'對象並將其保存在第三個視圖中,還是傳回選定的主題並將其保存在創建'標記'對象的原始視圖中?

非常感謝提前。

回答

2

我會爲此使用通知。通知是一種將應用程序的各個部分分離的簡單方法,但它們仍然可以一起工作。

在你的情況下,用戶選擇在第三視圖標籤對象的那一刻,我會發出通知,例如:

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

現在,在有「添加」按鈕控制器,使其訂閱到該事件:

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

確保您實現handleTagSelected:方法,並在該方法中你可以得到標籤對象,然後關閉已打開的明細視圖:

- (void)handleTagSelected:(NSNotification *)notification { 
    Tag *mytag = (Tag *)notification.object; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

然後你可以做任何你想要的標籤。

+0

謝謝@eduardo,我以前沒有使用NSNotifcations - 我將有一個閱讀,看看我如何。我想我有幾個問題需要解決,如果用戶從來沒有真正進入postNotification,那麼默認行爲是什麼,觀察者只是坐着聽,直到卸載,什麼時候我會應用removeObserver等等 - 我會玩。 - 感謝您花時間表達您的想法。 – Barry

+0

我認爲我會嘗試的方法是從UIBarButtonAdd按鈕開始鑽取(無需先創建 – Barry

+0

oops! - 我認爲我會嘗試的方法是從列表視圖上的UIBarButtonAdd按鈕開始下鑽(無需先創建新對象),允許用戶按照深入VC進行操作,最後在用戶選擇時在UserInfo中傳遞主題對象的postnotification主題。帶有UIButtonBarAdd的VC將在viewDidLoad中的SetObserve和viewDidUnload中的removeObserve。 HandleTopicSelected:方法將創建新的對象來填充它並保存上下文。聽上去怎麼樣?我留下了如何關閉3VC讓用戶回到列表視圖。 – Barry

相關問題