将收藏夹保存到 NSUserDefaults

Saving Favorites to NSUserDefaults

我有一个显示来自网站的 posts 的应用程序。我正在尝试为用户添加使用 NSUserDefaults 保存他们最喜欢的 post 的功能。我需要为用户想要保存为收藏的每个 post 保存标题和 url,这样我就可以在 table 视图中显示标题,然后允许用户 select 一个收藏夹,然后打开一个带有相应 url 的 Web 视图。我想我会在字典中保存 post 标题和 url,然后从字典数组中填充 table 视图。我的问题是如何在 NSUserDefaults 中保存字典而不覆盖以前保存到用户默认值的收藏夹?例如,用户将 post 保存到收藏夹字典,然后保存到用户默认值。然后他们将另一个 post 保存到字典中,但该字典替换了用户默认值中已有的字典。

这是我试过的。收藏夹 table 视图仅显示最后保存的一个。

- (void)addFavorite {
    NSMutableArray *favoritesArray = [NSMutableArray array];
    NSDictionary *favoriteDictionary = [NSDictionary dictionaryWithObjectsAndKeys:self.postTitle, @"title", self.postUrlString, @"url", nil];

    [favoritesArray addObject:favoriteDictionary];

    [[NSUserDefaults standardUserDefaults] setObject:favoritesArray forKey:@"favorites"];
    [[NSUserDefaults standardUserDefaults] synchronize];

你会想要这样的东西(这是 Swift 1.2)

func getPosts() -> [[String:String]]? {
    return NSUserDefaults.standardUserDefaults().arrayForKey("posts") as? [[String:String]]
}

func savePost(dictionary : [String:String]) {
    var newPosts : [[String:String]]
    if let existingPosts = getPosts() {
        newPosts = existingPosts;
        newPosts.append(dictionary);
    } else {
        newPosts = [dictionary]
    }
    NSUserDefaults.standardUserDefaults().setObject(newPosts, forKey: "posts");
}

像这样尝试一下

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *favoritesLoaded = [defaults objectForKey:@"favorites"];

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

    NSMutableArray *favorites = [NSMutableArray array];

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

    [favorites addObject:fav];

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