我有一个显示网站帖子的应用。我试图为用户添加使用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];
答案 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");
}