2015-07-21 44 views
0

我有它实现NSCoding的自定义对象,它看起来像这样(简化当然):节能字典NSCoding反对NSUserDefaults的

@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 
{ 
    ??? 
} 

让我的语法正确无误,我开始相信我只是在想这个,所以帮助将apprecaited! 谢谢!

-

编辑:

因为我已经解决了这个,这是很简单的只是有一个瞬间失效。也许不是最好的选择,所以打开任何改善建议!

-(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; 

} 
+0

是否要将结果存储在字典或默认系统中?你想在saveResults中做什么:forKey:? – Caleb

+0

我正在寻找将结果保存在字典中,并将字典置于系统默认值中。自从我编辑了我的答案以包含我的解决方案。谢谢您的帮助。 – xceph

+0

真的应该从问题中删除答案,并将答案标记为已接受的答案。 – Caleb

回答

0

也许我误解你,因为这个问题似乎太简单了给什么你有已经完成......

-(void)saveResults:(NSArray *)scanResults forKey:(NSString *)key 
{ 
    self.aDictionaryProperty[key] = scanResults; 
} 

-(NSArray*)readResults:(NSString *) key 
{ 
    return self.aDictionaryProperty[key]; 
} 
+0

谢谢,但问题更多的是在处理NSUserDefaults元素,以及我的cuson类。我已经解决了它并编辑了我的答案,感谢您的帮助! – xceph

0

我已经解决了这个像这样:

-(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; 

    }