【发布时间】:2015-07-21 13:51:23
【问题描述】:
我有一个实现 NSCoding 的自定义对象,它看起来像这样(当然是简化了):
@implementation FooBarThing
@synthesize foo = _foo;
@synthesize bar = _bar;
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super init];
if (self) {
_foo = [[coder decodeObjectForKey:FOO] retain];
_bar = [[coder decodeObjectForKey:BAR] retain];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:self.foo forKey:FOO];
[coder encodeObject:self.bar forKey:BAR];
}
@end
目前我将自定义类的数组保存到 NSUserDefaults,如下所示:
-(void)saveResults:(NSArray *)results
{
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:results];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"RESULTS"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(NSArray*)readResults
{
NSData *results = [[NSUserDefaults standardUserDefaults] objectForKey:@"RESULTS"];
NSArray *resultsArray = [NSKeyedUnarchiver unarchiveObjectWithData:results];
return resultsArray;
}
我想要做的,是将结果数组存储在字典中,以这样的字符串为键:
-(void)saveResults:(NSArray *)scanResults forKey:(NSString *)key
{
???
}
-(NSArray*)readResults:(NSString *) key
{
???
}
遇到语法正确的问题,我开始相信我只是在想这个,所以会很感激帮助! 谢谢!
--
编辑:
我已经解决了这个问题,这很简单,只是有一个短暂的失误。也许不是最佳选择,因此欢迎提出任何改进建议!
-(void)saveResults:(NSArray *)results forKey:(NSString *)key
{
NSMutableDictionary* dict = [NSMutableDictionary dictionaryWithDictionary:[self getResultsDict]];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:results];
if(dict == nil){
dict = [NSMutableDictionary dictionaryWithObject:data forKey:key];
}else{
[dict setObject:data forKey:key];
}
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:dict forKey:@"RESULTS_DICT"];
[userDefaults synchronize];
}
-(NSArray*)readFullResults:(NSString *)key
{
NSDictionary *dict = [self getResultsDict];
NSArray *result = nil;
if(dict != nil){
[dict objectForKey:key];
NSData *data = [dict objectForKey:key];;
result = [NSKeyedUnarchiver unarchiveObjectWithData: data];
}
return result;
}
-(NSArray*) getDates
{
NSDictionary *dict = [self getResultsDict];
if(dict != nil)
{
return [dict allKeys];
}
return nil;
}
- (NSDictionary*)getResultsDict{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *resultsDict = [userDefaults objectForKey:@"RESULTS_DICT"];
return resultsDict;
}
【问题讨论】:
-
您要将结果存储在字典中还是默认系统中?你想在 saveResults:forKey: 中具体做什么?
-
我希望将结果保存在字典中,并将字典放入系统默认值中。我已经编辑了我的答案以包含我的解决方案。感谢您的帮助。
-
应该真正从问题中删除答案,并将您的答案标记为已接受。
-
2天不行,到时候再编辑。
标签: ios objective-c syntax nsuserdefaults