NSDictionary objectForKey到var名称

时间:2014-02-02 08:25:45

标签: objective-c nsdictionary

是否可以通过从NSDicttionary .plist中读取的密钥的名称动态命名变量(我的是一个char数组)?

NSMutableDictionary *readDict = [[NSMutableDictionary alloc] initWithContentsOfFile:@"path/to/plist"];
    NSDictionary * getKeys = [readDict objectForKey:@"info"];
    for (id key in getKeys) {
        NSLog(@"%@ %@", key, [getKeys objectForKey:key]);
        // output key1 some data in here== (repeats with key2, etc.)
        NSData *theData = [getKeys objectForKey:key];
        const char *hexData = theData.bytes;
                      |
                      |__ so for each iteration in the loop it would be: 
                          i.e. key1, key2... to match the plist key names
    }                     instead of a static variable name.

plist中:

<dict>
    <key>info</key>
    <dict>
        <key>key1</key>
        <data>
        some data in here==
        </data>
        <key>key2</key>
        <data>
        some data in here==
        </data>
    </dict>
</dict>

1 个答案:

答案 0 :(得分:2)

简答:否

说明:

您正在声明一个局部变量,其范围只是它声明的循环。这些变量具有分配的静态编译时名称。

此外,动态更改名称没有意义,变量的名称不会影响其内容或更改其生命周期或范围 - 即使您可以更改名称,变量仍然只存在于单个迭代中循环,在迭代结束时,变量被销毁,在下一次迭代开始时创建一个新变量。

以防万一:

有时人们会问他们是否可以使用动态名称创建一个长期存在的变量,因此他们可以稍后通过名称找到它。虽然你仍然不能这样做(因为变量具有编译时名称),但这种情况的标准建议是使用NSMutableDictionary - 字典是从键(通常是字符串)到 any <的运行时映射。 / em>对象类型(间接包含任何值类型;例如,char *;因为它们可以包装为对象)。如果这是你的目标 - 创建一个“命名”字符指针的集合 - 那么这就是要采取的路线。但是,您需要确保自己无论这些字符指针引用的是什么,在您的情况下要求您保持这些指针周围的NSData对象引用(您可以将这些obkject保留在同一个字典中,例如创建一个具有NSData *char *属性的类,并在您的字典中存储此实例。