如何存储引用,然后使用extern NSString const?

时间:2011-11-18 19:55:14

标签: cocoa extern abrecord

我已经将plist作为带有字典条目的字典,每个ABRecord属性一个,我想稍后使用。

这些词典是键/值 NSStrings,如下所示: kABEmailProperty/email

我希望能够使用解压缩的plist通过枚举解压缩的plist字典来收集指定ABRecord的值(假设inRecord是ABRecord)

__block NSMutableArray *valueGroup = [[NSMutableArray alloc] init];

[self.propsDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSString *valueString = [inRecord valueForProperty:key];
        if (valueString) { 
            NSDictionary *dict = [NSDictionary dictionaryWithObject:valueString forKey:obj];
            [valueGroup addObject:dict];    
                }
            }
        }];

如何正确引用,以便它是ABRecord中的ABGlobals.h全局属性引用,而不是字符串存储在plist中?

我尝试过使用& key,(id)键和(void *)键,但我真的只是 flailing

我没有成功地搜索有关使用全球外播的各种问题,尽管这些内容已经提供了信息。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你会得到以下信息:

NSString *foo = "kABEmailProperty";

你希望能够做到这样的事情:

[inRecord valueForProperty:kABEmailProperty];

基于foo的值。正确?没有办法直接这样做,因为名称“kABEmailProperty”在运行时不易(轻松)访问;它只是一个编译时的名字。

我的建议是制作一本包含所有键的字典;像这样的东西:

NSDictionary *keys = [NSDictionary dictionaryWithObjectsAndKeys:kABEmailProperty, @"kABEmailProperty", kABOtherProperty, @"kABOtherProperty", ..., nil];

然后你可以这样做:

[inRecord valueForProperty:[keys objectForKey:foo]];

即。从字符串@"kABEmailProperty"kABEmailProperty实际拥有的值进行映射。