2011-06-27 38 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的*相同*实例。你不是,正如我在第一段中解释的那样。 –

相关问题