单例数组未保存到 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;
}
我尝试了各种可用的方法,但无法得到合适的解决方案。 我有一个单例数组,键值对数组保存在我的 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;
}