从NSUserDefaults获取NSMutableArray并添加元素

Chl*_*bta -1 cocoa objective-c nsuserdefaults ios

我有一个按钮,允许用户将帖子标记为收藏.
这是我的代码:

+(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;
}
Run Code Online (Sandbox Code Playgroud)

此代码只适用于第一次,当favoritePostArray为空且用户将第一个帖子添加到数组时.
否则,如果我按下另一次添加收藏夹按钮添加其他人发布到favoritePostArray我的应用程序被阻止,并且没有显示错误.我已经使用了调试点,我认为我的应用程序在这一行被阻止了

[userDefault setObject:tempArray forKey:@"favoritePostArray"];

那我错过了什么?

Bri*_*ian 6

mutableArrayValueForKey是一个KVC方法,而不是NSUserDefaults上的方法.试试这个:

NSMutableArray *tempArray = [[userDefault arrayForKey:@"favoritePostArray"] mutableCopy];
Run Code Online (Sandbox Code Playgroud)