NSDictionary自定义对象存储和检索

时间:2013-07-02 06:41:27

标签: ios objective-c

尝试在NSDictionary中存储值并检索它

物件

#import <Foundation/Foundation.h>
@class ATTTEstOBJ;

@interface ATTTEst : NSObject

@property (nonatomic, retain) NSString *string1;
@property (nonatomic, retain) NSString *string2;
@property (nonatomic, retain) ATTTEstOBJ *obj1;

@end


@interface ATTTEstOBJ : NSObject

@property (nonatomic, retain) NSString *string3;
@property (nonatomic, retain) NSString *string4;
@property (nonatomic, retain) NSString *array1;

@end

我知道需要对其进行正确编码以保存和检索值。但在这种情况下,它是一个复合对象,我不知道如何处理它。

- (void) encodeWithCoder: (NSCoder *)coder

所以TLDR,如何将复合值保存到字典中并将其检索回来

我想将ATTTest存储到字典中并将其检索回来。

编辑:详细解释

ATTTEst *test=[[ATTTEst alloc]init];
test.string1=@"a";
test.string2=@"b";


ATTTEstOBJ *obj=[[ATTTEstOBJ alloc]init];
obj.string3=@"c";
obj.string4=@"d";

test.obj1=obj;



NSMutableDictionary *dict=[[NSMutableDictionary alloc]initWithCapacity:3];

[dict setObject:test forKey:@"test"];
NSLog(@"%@",dict);

ATTTEst *tester=[dict objectForKey:test];
NSLog(@"%@",tester.obj1.string3);

IT显示null.as输出我想获取tester.obj1.string3

的c值

2 个答案:

答案 0 :(得分:0)

ATTTEst *tester=[dict objectForKey:test];

应该是

ATTTEst *tester=[dict objectForKey:@"test"];

在检索对象时,您已使用对象test(而不是字符串@"test")作为键。我不这么认为 是故意的。

答案 1 :(得分:-1)

为了将它们存储到NSDictionary中,您不需要对它们进行编码。

只是做:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:, attestObject,@"attestObject", attest2Object,@"atttest2" nil];

其中attestObject和attest2Object是您要存储的对象,字符串是其键。

这与编码无关......