我的另一个问题含糊不清,所以我会更清楚地说明这一点。我在一个viewController上有一个表视图,当选择一个单元格时,它会向NSUserDefaults保存一个数字。在我的主viewController上,我检索这个数字,并希望用它更新标签。我做了一些调试,发现当我从tableView返回到我的主viewController时,这就是发生的事情的顺序:
1)主视图加载 2)tableView单元格点击识别 3)保存到NSUserDefaults的号码
如何更改顺序以便主视图最后加载,这样当我单击一个单元格时,它会更改主viewController中的标签?
这是我的didSelectRow方法的代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *pointsPath = [[NSString alloc] initWithFormat:@"totalPoints"];
NSString *numberFirst = [[NSString alloc] initWithFormat:@"numberFirst"];
int totalPoints = [[NSUserDefaults standardUserDefaults] integerForKey: pointsPath];
int number = [[NSUserDefaults standardUserDefaults] integerForKey:numberFirst];
if([indexPath row] == 1)
{
NSLog(@"Selected First row");
if(totalPoints < 10)
{
if (number != 0)
{
NSLog(@"Did not add a point, but saved");
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:numberFirst];
[[NSUserDefaults standardUserDefaults] synchronize];
}
else if (number == 0)
{
NSLog(@"Added a Point");
int newPoints = totalPoints + 1;
[[NSUserDefaults standardUserDefaults] setInteger:newPoints forKey: pointsPath];
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:numberFirst];
[[NSUserDefaults standardUserDefaults] synchronize];
int logPoints = [[NSUserDefaults standardUserDefaults]integerForKey:pointsPath];
NSLog(@"Point Count:%i", logPoints);
}
}
答案 0 :(得分:0)
按需加载控制器的视图。因此触发viewDidLoad
的事情是执行controller.view
的其他人。如果您已经将视图控制器推入容器视图或以其他方式开始呈现它,那么那将是负责的代理。
viewDidLoad
,在iOS 5及以下viewDidUnload
下,如果您想以编程方式创建视图的某些部分,则可以为您提供所需的钩子。
如果您正在尝试考虑在控制器不可见时可能已更改的设置,则应该使用viewWillAppear:
。这是确定何时从不可见转变为可见的预期方式。
如果你想在这两件事之间建立一个完全活跃的链接,那么你应该设置一个视图控制器来显示要监听NSUserDefaultsDidChangeNotification
的数字,并在发生这种情况时根据需要更新视图。
答案 1 :(得分:0)
伙计我终于找到了问题,如果有人有这个问题...你需要确保当用户选择一个单元格时,它是一个推送segue而不是一个模态...这是如此令人沮丧,这是如此简单!!