2011-06-27 39 views
1

所以我想創建一個最近查看圖片的數組。基本上我有一個TableViewController,它推動位於一個標籤中的導航控制器中的圖片視圖,然後試圖讓導航控制器記錄最近查看過的圖片,並將它們列在TableViewController中,然後將其推送到新的顯示圖片的視圖。我以編程方式在選項卡欄控制器內設置了兩個導航控制器。幾乎所有的東西都是按照我想要的方式設置的,但我只是無法將最近查看過的圖片信息傳遞給將顯示列表的表格視圖控制器。試圖將數據從一個視圖控制器傳遞到另一個標籤欄控制器

這裏是我正在嘗試當用戶點擊一個特定的表格單元格來傳遞數據:

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     RecentsTableViewController *rtvc = [[RecentsTableViewController alloc] init]; 
     [rtvc.recents addObject:[self dictionaryAtIndex:indexPath]]; 
     [rtvc release]; 

} 

最近用過的是,我在RecentsTableViewController.創建是越來越初始化確定一個可變數組,使用檢查NSLog,但每次用戶單擊另一個視圖控制器中的表格單元格時,字典都不會被傳遞給該數組。我也知道字典信息是正確的並且設置正確,因爲它傳遞到顯示圖像的視圖。我想我只是困惑,因爲我可以爲NavigationController做到這一點,我只是在努力尋找在一個TabBarController.

對不起數據傳遞答案,如果這個職位可能是長/混亂,但我真的到處去尋找一個回答沒有運氣。我聽說過使用應用程序委託來存儲像一個全局變量,但我的印象是這是不好的做法,我試圖正確地編寫我的代碼。

下面是dictionaryAtIndex方法更新的代碼:

- (NSDictionary *)dictionaryAtIndex:(NSIndexPath *)indexPath { 

    NSArray *flickrPics = [FlickrFetcher photosAtPlace:self.placeID]; 
    NSDictionary *returnedDictionary = [flickrPics objectAtIndex:indexPath.row]; 
    return returnedDictionary; 

} 
+0

您需要創建一個插座,至少這就是我會做的。 –

+0

您的意思是做一個如果是這樣,你怎麼去做這件事? – Alex

+0

如果你發佈源代碼到dictionaryAtIndex方法,它可能有助於調試。 – NWCoder

回答

0

indexPath is a struct其中包含兩個屬性,行和索引,並不能直接使用在陣列中訪問一個對象。你可能想這樣做,而不是:

[rtvc.recents updateRecents:[self dictionaryAtIndex:indexPath.row]]; 
+0

當我這樣做時,編譯器給了我一個錯誤:「傳遞'dictionaryAtIndex:'的參數1使得整型指針沒有強制轉換。」 – Alex

+0

請發表你的方法'dictionaryAtIndex'。這聽起來像它可能被定義爲奇怪。 – RyanR

+0

- (NSDictionary *)dictionaryAtIndex:(NSIndexPath *)indexPath {NSArray * flickrPics = [FlickrFetcher photosAtPlace:self.placeID]; NSDictionary * returnedDictionary = [flickrPics objectAtIndex:indexPath.row]; return returnedDictionary; } **請注意,將數據傳遞給顯示圖片的視圖控制器時,這起作用 – Alex

0

你正在創建一個新的RecentsTableViewController(這是不一樣的一個標籤欄),設置它的「最近使用的項目」,然後將其釋放。沒有別的東西有指向它的指針,所以沒有別的東西會看到它的「最近」項目。

至少有三個簡單的上下的方式來更新「最近」控制器:

  • 訪問它直接從標籤欄控制器(難以置信的噁心分層衝突和休息,當你更改選項卡順序或導航結構或......):[(RecentsTableViewController*)[self.tabBarController.viewControllers objectAtIndex:...]) updateRecentsWithDictionary:...]
  • 張貼通知,您在RecentsTableViewController傾聽:[[NSNotificationCenter defaultCenter] postNotificationWithName:MyViewedPictureNotificationName object:nil userInfo:...]
  • 保存到NSUserDefaults的。從-[RecentsTableViewController viewWillAppear:]的NSUserDefaults加載它。這樣做的好處是,它始終貫穿於應用程序啓動。 (有隱含的假設,默認值不會在「最近」視圖可見時發生變化)。
+0

我應該在哪裏將它保存到NSUserDefaults,即什麼文件/方法?每次用戶點擊一行時保存它是否有意義?我希望在應用程序啓動時保存它,但我也需要它在第一次啓動時運行。謝謝你的幫助。 – Alex

+0

另外,wouldnt只是爲RecentsTableViewController做一個實例變量解決這個問題?我已經嘗試過,數據仍然不會傳遞給它。 – Alex

+0

是的,如果你能找到RecentsTableViewController的*相同*實例。你不是,正如我在第一段中解釋的那樣。 –

相關問題