所以我正在尝试创建一组最近查看的图片。基本上我有一个TableViewController
在导航控制器中推送一个图片视图,位于一个标签中,然后我试图让一个导航控制器记录最近查看过的图片,将它们列在TableViewController
中然后还将其推送到显示图片的新视图。我以编程方式在标签栏控制器中设置了两个导航控制器。几乎所有内容都按照我想要的方式设置,但我无法将最近查看的图片信息传递给将显示列表的表视图控制器。
以下是我在用户点击特定表格单元格时尝试传递数据的方法:
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
RecentsTableViewController *rtvc = [[RecentsTableViewController alloc] init];
[rtvc.recents addObject:[self dictionaryAtIndex:indexPath]];
[rtvc release];
}
recents是我在RecentsTableViewController.
中创建的可变数组它正在初始化好,使用NSLog,
检查但是每次用户点击另一个视图控制器中的表格单元格时,字典就是没有传递给数组。我也知道字典信息是正确的并且设置正确,因为它可以传递到显示图像的视图。我想我很困惑,因为我可以为NavigationController
做这件事,我只是在TabBarController.
很抱歉,如果这篇文章可能很长/令人困惑,但我真的到处找了一个没有运气的答案。我听说使用app delegate存储就像一个全局变量,但我认为这是不好的做法,我正在尝试正确编写我的代码。
以下是dictionaryAtIndex方法的更新代码:
- (NSDictionary *)dictionaryAtIndex:(NSIndexPath *)indexPath {
NSArray *flickrPics = [FlickrFetcher photosAtPlace:self.placeID];
NSDictionary *returnedDictionary = [flickrPics objectAtIndex:indexPath.row];
return returnedDictionary;
}
答案 0 :(得分:0)
indexPath is a struct包含两个属性:row和index,不能直接用于访问数组中的对象。你可能想要这样做:
[rtvc.recents updateRecents:[self dictionaryAtIndex:indexPath.row]];
答案 1 :(得分:0)
您正在创建 new RecentsTableViewController
(它与标签栏中的不一样),设置其“最近的项目”,然后将其释放。没有其他东西有指针,所以没有别的东西会看到它的“最近”项目。
至少有三种简单方法可以更新“最近”控制器:
[(RecentsTableViewController*)[self.tabBarController.viewControllers objectAtIndex:...]) updateRecentsWithDictionary:...]
[[NSNotificationCenter defaultCenter] postNotificationWithName:MyViewedPictureNotificationName object:nil userInfo:...]
-[RecentsTableViewController viewWillAppear:]
中的NSUserDefaults加载它。这里的优点是它可以在应用程序启动时持续存在。 (隐含的假设是,当“最近”视图可见时,默认值不会改变。)。