将收藏夹保存到NSUserDefaults

时间:2015-02-22 21:43:09

标签: ios objective-c nsuserdefaults

我有一个显示网站帖子的应用。我试图为用户添加使用NSUserDefaults保存自己喜欢的帖子的功能。我需要保存用户想要保存为收藏夹的每个帖子的标题和网址,以便我可以在表格视图中显示标题,然后允许用户选择收藏夹,然后打开带有相应网址的网页视图。我想我会将帖子标题和网址保存在字典中,然后从一系列字典中填充表格视图。我的问题是如何在NSUserDefaults中保存字典而不覆盖已保存到用户默认值的先前收藏?例如,用户将帖子保存到收藏夹词典,然后将其保存到用户默认值。然后他们将另一个帖子保存到字典中,但该字典替换了用户默认值中的字典。

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

- (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];

2 个答案:

答案 0 :(得分:3)

尝试类似这样的事情

    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];

答案 1 :(得分:0)

你会想要这样的东西(这是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");
}