例如,我有一个这样的方法:
- (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];
}
然后它总是无法显示我想要的tableview。我使用nslog在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中打印一些东西,看看这个方法是否真的被调用了。然后我发现它从未被召唤过。
答案 0 :(得分:0)
我根据我过去的C或Java经验做了上述原因,我认为你进行设置或初始化的地方并不重要,只要你在任何地方做任何你想做的事情或类似的方法或函数这些行:
self.recentPhotos = [[NSUserDefaults standardUserDefaults] objectForKey:@"RecentPhotos"];
[self.tableView reloadData];
然而它根本不起作用。我花了大约一个小时来检查其他所有东西来弄清楚因为我一直认为我正在用Java做正确的方法。
然后我试着把它们放在viewDidLoad()中,它起作用了。我再次观看斯坦福大学关于viewController生命周期的讲座,正如Paul所说:最好在vieDidLoad()中进行所有设置或初始化。现在我了解到这种差异。
这只是我自己在完成作业4时的经验。
希望它能帮助别人不要浪费太多时间。感谢
答案 1 :(得分:0)
我自己花了几个小时做这个部分。我希望有几条评论会有所帮助:
1-您实际上是在向后使用NSUserDefaults。我会不断地将图像添加到本地数组,然后将该对象的setObject设置为首选项(而不是更新NSUserDefaults并将其复制到本地数组)。更合乎逻辑。
2-我认为代码中重新加载的位置不是问题。我只是在我的代码上测试它,它工作得很好。出于某种原因,当我在IB中移动VC时,它断开了Source和委托。所以我不得不重新连接它们。我想知道你是否发生了这件事。
3-提示在进行任务时:一旦将VC嵌入到TabBarController中,请考虑表重新加载的事件序列: - )
KB