0

例如,我有一个这样的方法:

- (void)addToRecents:(NSDictionary *)photo
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *recents = [[defaults objectForKey:@"RecentPhotos"] mutableCopy];
    if(!recents) recents = [NSMutableArray array];
    [recents addObject:photo];
    [defaults setObject:recents forKey:@"RecentPhotos"];
    [defaults synchronize];
    self.recentPhotos = [[NSUserDefaults standardUserDefaults] objectForKey:@"RecentPhotos"];    
    [self.tableView reloadData];
}

然后它总是无法显示我想要的表格视图。我使用 nslog 打印一些东西,- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath看看这个方法是否真的被调用了。然后我发现它从来没有被调用过。

4

2 回答 2

0

我自己在这部分上花了几个小时。我希望有几条评论会有所帮助:

1-您实际上是在向后使用 NSUserDefaults。我会不断地将图像添加到本地数组中,然后将该数组设置为首选项(而不是更新 NSUserDefaults 并将其复制到本地数组)。只是更符合逻辑。

2-我不认为代码中重新加载的位置是问题所在。我刚刚在我的代码上对其进行了测试,它运行良好。出于某种原因,当我在 IB 中移动 VC 时,它断开了 Source 和 delegate 的连接。所以我不得不重新连接它们。我想知道这是不是发生在你身上。

3- 在分配过程中提示:一旦将 VC 嵌入 TabBarController 中,请考虑重新加载表的事件顺序 :-)

知识库

于 2012-07-06T18:33:33.470 回答
0

我根据我过去在 C 或 Java 方面的经验做了上述原因,我认为你进行设置或初始化的地方并不重要,只要你只是在任何你想要的地方做它,即使是在像这些行这样的方法或函数中:

self.recentPhotos = [[NSUserDefaults standardUserDefaults] objectForKey:@"RecentPhotos"];    
[self.tableView reloadData];

然而它根本没有用。我花了大约一个小时来检查所有其他的东西来弄清楚,因为我一直认为我在做正确的事情,就像在 Java 中一样。

然后我尝试将它们放在 viewDidLoad() 中,它起作用了。我再次观看了斯坦福关于 viewController 生命周期的讲座,正如 Paul 所说:最好在 vieDidLoad() 中进行所有设置或初始化。现在我了解了这种差异。

这只是我自己完成作业 4 的经验。

希望它会帮助其他人不要在这方面浪费太多时间。谢谢

于 2012-07-06T04:03:46.743 回答