从 NSUserDefaults 获取 NSMutableArray 并添加元素
Getting NSMutableArray from NSUserDefaults and adding elements
我得到了允许用户将 post 标记为收藏的按钮。
这是我的代码:
+(NSMutableArray*) getFavoritePostsArray {
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *tempArray = [userDefault mutableArrayValueForKey:@"favoritePostArray"];
if ([tempArray count] == 0) {
return [[NSMutableArray alloc] init];
}
else {
return tempArray;
}
}
+(BOOL)addFavoritePost:(CostumSDPost *)post {
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *tempArray = [GlobalFunctionAndVariable getFavoritePostsArray];
NSDictionary *tempPost = @{
@"title" : post.title,
@"ID": post.ID,
@"imageURL": post.imageURl,
@"viewsNumber" : post.viewsNumber,
@"content" : post.content,
@"date": post.date,
@"authorName": post.authorName,
@"categoryList": post.categoryList,
@"commentsArra": post.commentsArray,
@"commentsStatus": post.commentsStatus,
@"commentsNumber":[[NSString alloc] initWithFormat:@"%lu", post.commentsNumber],
};
[tempArray addObject:tempPost];
//[userDefault removeObjectForKey:@"favoritePostArray"];
//[userDefault synchronize];
[userDefault setObject:tempArray forKey:@"favoritePostArray"];
//[userDefault synchronize];
return YES;
}
此代码仅适用于第一次,当 favoritePost 数组为空且用户将第一个 post 添加到数组时。
否则,如果我再次按下添加收藏夹按钮以将其他人 Post 添加到收藏夹Post 阵列,我的应用程序将被阻止并且不会显示任何错误。
我使用了调试点,我认为我的应用程序在此行被阻止
[userDefault setObject:tempArray forKey:@"favoritePostArray"];
所以我在这里错过了什么?
mutableArrayValueForKey
是 KVC 方法,不是 NSUserDefaults 上的方法。试试这个:
NSMutableArray *tempArray = [[userDefault arrayForKey:@"favoritePostArray"] mutableCopy];
我得到了允许用户将 post 标记为收藏的按钮。
这是我的代码:
+(NSMutableArray*) getFavoritePostsArray {
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *tempArray = [userDefault mutableArrayValueForKey:@"favoritePostArray"];
if ([tempArray count] == 0) {
return [[NSMutableArray alloc] init];
}
else {
return tempArray;
}
}
+(BOOL)addFavoritePost:(CostumSDPost *)post {
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *tempArray = [GlobalFunctionAndVariable getFavoritePostsArray];
NSDictionary *tempPost = @{
@"title" : post.title,
@"ID": post.ID,
@"imageURL": post.imageURl,
@"viewsNumber" : post.viewsNumber,
@"content" : post.content,
@"date": post.date,
@"authorName": post.authorName,
@"categoryList": post.categoryList,
@"commentsArra": post.commentsArray,
@"commentsStatus": post.commentsStatus,
@"commentsNumber":[[NSString alloc] initWithFormat:@"%lu", post.commentsNumber],
};
[tempArray addObject:tempPost];
//[userDefault removeObjectForKey:@"favoritePostArray"];
//[userDefault synchronize];
[userDefault setObject:tempArray forKey:@"favoritePostArray"];
//[userDefault synchronize];
return YES;
}
此代码仅适用于第一次,当 favoritePost 数组为空且用户将第一个 post 添加到数组时。
否则,如果我再次按下添加收藏夹按钮以将其他人 Post 添加到收藏夹Post 阵列,我的应用程序将被阻止并且不会显示任何错误。
我使用了调试点,我认为我的应用程序在此行被阻止
[userDefault setObject:tempArray forKey:@"favoritePostArray"];
所以我在这里错过了什么?
mutableArrayValueForKey
是 KVC 方法,不是 NSUserDefaults 上的方法。试试这个:
NSMutableArray *tempArray = [[userDefault arrayForKey:@"favoritePostArray"] mutableCopy];