单例数组未保存到 NSUserDefaults

Singleton array not being saved to NSUserDefaults

我尝试了各种可用的方法,但无法得到合适的解决方案。 我有一个单例数组,键值对数组保存在我的 HomeVC 中。该数组保存在 NSUserDefaults 中,并在另一个 Class RewardsVC 中检索。但是一旦应用程序被终止并重新启动,单例数组中的所有数据都会被删除。有什么帮助吗? 这是代码:

if ([json objectForKey:JSON_KEY_REWARDS]) 
{
    if([[json objectForKey:JSON_KEY_REWARDS] objectForKey:JSON_KEY_REWARD_ARRAY]){
        NSMutableArray *newRewardArray=[[json objectForKey:JSON_KEY_REWARDS] objectForKey:JSON_KEY_REWARD_ARRAY];
        if([newRewardArray count] > 0){
            shouldUpdate = TRUE;
        }
        for (NSMutableDictionary *reward in newRewardArray)
        {
            NSMutableDictionary *mutableReward = reward ;
            [[Utility getSharedInstance].rewardsFuckingArray addObject:mutableReward];
        }
    }
    [[NSUserDefaults standardUserDefaults] setObject:[Utility getSharedInstance].rewardsFuckingArray forKey:@"yourKey"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    }

实用程序是我的单例 class,我在 @property (strong, nonatomic) NSMutableArray *rewardsFuckingArray; +(Utility*) getSharedInstance; Utility.h 中做了。 在 Utility.m:

+(Utility*) getSharedInstance
{
    static Utility* _shared = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _shared = [[self alloc] init];
    });
    return _shared;
}

- (id)init {
    if (self = [super init]) {
        self.rewardsFuckingArray = [[NSMutableArray alloc] init];
    }

    return self;
}

我RewardsVC.m,我是这样做的:

rewardsArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"yourKey"] mutableCopy];

当应用被终止时,您需要从 NSUserDefaults 加载数据。你可以在构造 Utility 的单例实例时执行此操作,方法是在你的 Utility.m 文件中实现你的 -(id)init 方法,如下所示:

- (id)init
{
    if (self = [super init])
    {
        NSArray* rewards = [[NSUserDefaults standardUserDefaults] objectForKey:@"yourKey"];

        if (rewards != nil)
        {
             self.rewardsFuckingArray = [NSMutableArray arrayWithArray:rewards];
        }
        else
        {
             self.rewardsFuckingArray = [[NSMutableArray alloc] init];
        }
    }

    return self;
}