在我永無止境地尋求將錶行選擇共享到以模態視圖加載的多個視圖時,我已將它歸結爲一個問題。我使用Apples DrillDownSave示例代碼作爲模型來重新創建這個魔術。並認爲我已經設置完全相同...分享didSelectRowAtIndexPath選擇在2個控制器之間的數組中
在我的RootViewController.m的didSelectRowAtIndexPath部分,我有以下代碼將violinMakers MSMutableArray複製到同名的DetailsView MSMuteableArray。所有的顏色編碼,並沒有錯誤告訴我,我在正確的道路上..但是..
detailsView.violinMakers = [violinMakers objectAtIndex:indexPath.row];
在RootviewController.h文件
我引用DetailsViewController通過:
@class DetailViewController
DetailsViewController *detailsView;
NSMutableArray *violinMakers;
@property (nonatomic, retain) NSMutableArray *violinMakers;
然後在DetailsViewController。 .h文件:
NSMutableArray *violinMakers;
IBOutlet UITextView *violinMakerDescription;
@property (nonatomic, retain) NSMutableArray *violinMakers; //tried assign or copy no difference
@property (nonatomic, retain) IBOutlet UITextView *violinMakerDescription;
而在DetailsViewController .m文件:
- (void)viewWillAppear:(BOOL)animated
ViolinMaker *violinMaker = (ViolinMaker *)violinMakers;
[violinMakerDescription setText: [violinMaker description]];
NSLog(@"violinMakerDescription in detailsView: %@", [violinMaker description]);
我有一個單獨的類,如上所示,我用它來定義數據violinMaker。這在didSelectRowAtIndexPath內的rootviewcontroller中工作正常,所以我知道這不是問題的一部分,我當然在.m文件中引用它。 它正常地連接IB,因爲我測試它的工作原理是直接從RootViewController中直接推送DetailsViewController,並將數據正確加載到UITextView中。
我推送的觀點啓動DetailsViewController(完美的作品)從RootViewController的(tableViewColler),它是通過啓動一個模態的視圖:
DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil ];
UINavigationController *aDetailsViewController = [[UINavigationController alloc] initWithRootViewController:detailsViewController];
[self presentModalViewController:aDetailsViewController animated:YES];
// [violinMakerView release];
[DetailsViewController retain]; // or release no different
[aDetailsViewController release];
我得到的構建沒有錯誤,並查看加載,但textView中的信息是空白的。這也告訴我,它是裝載什麼,而且正確連接......我這麼近......但是我可以從我的NSLog看到,該值是:
violinMakerDescription in detailsView: (null)
所以小提琴製作從RootViewController的不被複制到DetailsViewController中的violinMakers數組中。我討厭承認它,但幾個星期以來,我嘗試了各種解決方案,通過使用NSDefender和其他各種方法來解決這個問題。我認爲答案是,violinMakers被釋放,然後只傳遞任何東西,或者RootViewController中的分配行不起作用。任何人都知道我可以改變什麼?
我真的很感謝一些幫助,我只是沒有得到我想念的東西,但是這是我得到的最接近我只需要鏈接權利,或者看看爲什麼值不被保留。如果有方法檢查值的發佈時間,我可以檢查這個問題,也許就是這樣。我試圖在任何地方保留它(並且在我開始工作後正確)但它只是不工作......幫助?
謝謝大家!
真誠柯克
試圖改變加載線在RootViewController的到:
[detailsView.violinMakers addObject: [violinMakers objectAtIndex:indexPath.row]];
@Frank 首先感謝您對這種幫助! 我也設置在RootViewController的的小提琴對象以相同的方式,並能正常工作有,如下:
violinMaker = [self.violinMakers objectAtIndex:indexPath.row];
ViolinMakerViewController *violinMakerViewController = [[ViolinMakerViewController alloc] initWithNibName:@"ViolinMakerViewController" bundle:nil];
self.violinMakerView = violinMakerViewController;
[[self navigationController] pushViewController:violinMakerView animated:YES];
[self.violinMakerView.violinMakerName setText:[violinMaker name]];
....
[self.violinMakerView.violinMakerDescription setText:[violinMaker description]];
NSLog(@"violinMaker description variable in RootView: %@", [violinMaker description]);
DetailsViewController.violinMakers = [violinMakers objectAtIndex:indexPath.row];
在這裏,我看到的NSLog它加載在這裏很好,所以我堅信這裏加載到數組從objectAtIndex:indexPath.row然後複製該數組並將其放入DetaisViewController中的ViolinMaker對象將會起作用。我不希望再次在DetailsViewController中重新創建ViolinMaker對象,只需從數組中重新加載它,就像從RootViewController中重新加載它一樣。
這是DrillDownSave Apple示例如何執行此操作,並且鏡像此配置。凡在didSelectRowAtIndex的level1ViewController下面的代碼
// provide the 2nd level its content
level2ViewController.listContent = [[listContent objectAtIndex:indexPath.row] objectForKey:kChildrenKey];
我不需要的關鍵部分,因爲這是對召回的位置。那裏的示例代碼中的兩個控制器都使用相同名稱的NSArrays,並且它似乎通過此行將L1陣列複製到L2陣列。
他們使用推送TableViews,這將使它很容易,但我沒有這樣做,IBOutlets將信息加載到UITextView的,所以我必須在RootView控制器中進行數組賦值,選擇發生在那裏。 如果我只能保留在RootView控制器中分配的ViolinMaker,那麼我可以在Details中挑選它,但我似乎無法弄清楚這兩者之一...
感謝您的幫助,我真的很粘..
你可以添加你的大括號和什麼不回來?我越來越困惑:) – 2009-12-16 17:23:25
另外,我是否正確地認爲細節視圖一次顯示一個ViolinMaker的細節? – 2009-12-16 17:30:49