我正在尋找一種將我的屬性直接設置爲作爲實例變量的NSMutableDictionary的簡寫方式。即:使用NSMutableDictionary作爲屬性的後備存儲
KVCModle.h:
@interface KVModel : NSObject {
NSMutableDictionary * data;
}
@property(nonatomic,assign)NSString * string1;
@property(nonatomic,assign)NSString * string2;
@end
KVCModel.m
#import "KVModel.h"
@implementation KVModel
-(id)init
{
self = [super init];
if(self)
{
data = [[NSMutableDictionary alloc] init];
}
return self;
}
-(NSString *)string1
{
return [data objectForKey:@"string1"];
}
-(NSString *)string2
{
return [data objectForKey:@"string2"];
}
-(void)setString1:(NSString *)_string1
{
[data setObject:_string1 forKey:@"string1"];
}
-(void)setString2:(NSString *)_string2
{
[data setObject:_string2 forKey:@"string2"];
}
-(void)dealloc
{
[data release];
[super dealloc];
}
@end
我試圖重寫setValue:ForKey:
和valueForKey:
,但這些都是不叫,它們允許你直接設置屬性而不使用屬性語法。
我已經做出了預處理器宏來使這項工作在過去,但我根本沒有興趣打字,並且希望儘可能地避免在未來可能出現的情況。有沒有辦法讓我不熟悉的這項工作?
我曾考慮過使用NSManagedObject,但我不確定是否可以從中得到我想要的。 編輯: source
嘿彼得 - 我發佈的代碼可以完成你所描述的任務。它也處理一些類型的裝箱/拆箱。 :) – nielsbot 2011-05-03 21:51:07
@nielsbot:非常酷!之前我假設你正在做KVC特定的事情,但現在我看到你正在做我所描述的事情。我的道歉和+1。 – 2011-05-03 21:55:17
謝謝。希望人們可以使用代碼。我將它用於可訪問NSDefaults替代的屬性語法。小心 - 我的代碼可能有錯誤...但我在生產中使用它。 – nielsbot 2011-05-03 21:57:53