使用新的NSUserDefault值重新加载UITableView

时间:2015-02-23 00:19:37

标签: ios objective-c uitableview

我在NSUserDefaults中有一个字典数组,这些值用于在选项卡栏上另一个选项卡的表视图中显示数据。如果我向NSUserDefaults数组添加一个新值并关闭应用程序然后返回到它并进入表格视图选项卡,它就可以了。我遇到的问题是当我将新对象添加到用户默认数组时,然后转到表视图选项卡而不离开应用程序。当我这样做时,表视图不会显示刚刚添加的值。

这是我将字典添加到NSUserDefaults的地方:

- (void)addFavorite {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *favoritesLoaded = [defaults objectForKey:@"favorites"];

    NSDictionary *fav = [NSDictionary dictionaryWithObjectsAndKeys:
                         self.postTitle, @"title",
                         self.postUrlString, @"url",
                         nil];

    NSMutableArray *favorites = [NSMutableArray array];

    if (favoritesLoaded) {
        favorites = [[NSMutableArray alloc] initWithArray:favoritesLoaded];
    } else {
        favorites = [[NSMutableArray alloc] init];
    }

    [favorites insertObject:fav atIndex:0];

    [defaults setObject:favorites forKey:@"favorites"];
    [defaults synchronize];
}

在我的表格视图中:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;

    [self.tableView setDataSource:self];
    [self.tableView setDelegate:self];
    self.tableView.backgroundColor = [UIColor blackColor];

    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"]) {
        self.redditPosts = [[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"];
    }
    else {

    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
    NSDictionary *post = [self.redditPosts objectAtIndex:[indexPath row]];

    if (cell == nil) {
        cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"];
    }
    if (cell) {
        cell.textLabel.text = [post objectForKey:@"title"];
        cell.backgroundColor = [UIColor clearColor];
        cell.textLabel.textColor = [UIColor whiteColor];
    }

    return cell;
}

1 个答案:

答案 0 :(得分:2)

插入新内容后,您应重新加载tableView:

[self.tableView reloadData];

如果这可能需要一段时间,您可以使用以下内容,这样就不会冻结您的应用:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});