在选项卡栏中选择时,视图不会读取用户默认值

时间:2010-07-14 21:58:55

标签: iphone uitabbarcontroller

我有一个标签栏项目,用于在tableview中显示用户收藏夹。我有另一个标签栏项目,它显示一个视图,并允许用户添加收藏夹。

更新

此类收藏夹会从创建和添加收藏夹的类的viewDidLoadMethod中的NSUserDefaults中读取。

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSArray *prefs = [def arrayForKey:@"addedQuotes"];  
userAddedQuotes = [[NSMutableArray alloc] initWithArray:prefs];

然后当用户实际添加收藏夹

时执行此代码
if([text1.text length] && [text2.text length])
{
    NSString *temp = [NSString stringWithFormat:@"%@^%@", 
    text1.text, text2.text];

    [userAdded addObject:temp];

    NSUserDefaults *myDefault = [NSUserDefaults standardUserDefaults];

    [myDefault setObject:userAdded forKey:@"addedFavorites"];

在tableview类中,从NSUserDefaults加载此数组以显示值,我在viewWillAppear方法中使用以下内容。

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSArray *prefs = [def arrayForKey:@"addedFavorites"];   
favorites = [[NSMutableArray alloc] initWithArray:prefs];

目前,如果我添加收藏夹,然后转到显示收藏夹选项卡视图,则不会加载新添加的项目。只有当我退出时(按主页按钮)并再次启动应用程序。

如果选中标签栏项并显示视图,如何让视图再次从用户默认值中读取?

此致

1 个答案:

答案 0 :(得分:2)

您是否尝试过调用同步?

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];

以下评论的更新 - 您的表格应该使用加载了NSUserDefaults的数组中的数据。

你的cellForRowAtIndexPath应该是这样的(如果你正在重复使用表格单元格,那么你应该这样做)

...

if (cell == nil) {

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];     

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}

// update cell
cell.textLabel.text = [myUserDefaultsArray objectAtIndex:indexPath.row];
NSLog(@"The table data should be %@", [myUserDefaultsArray objectAtIndex:indexPath.row]);

return cell;

您可以快速显示数组的内容,以确保在显示视图时更新数据,方法是在视图出现时执行此操作(假设您已经加载了数组)

int i = 0;

for (i; i<=[myUserDefaultsArray count] - 1; i++) {

    NSLog(@"data is %@ for row %d", [myUserDefaultsArray objectAtIndex:i], i);
}