如何使用带有NSArray的setValue:forKey:函数

时间:2012-05-17 01:39:58

标签: iphone objective-c

我尝试使用-setValue:forKey:函数并使用-valueForKey:获取值

示例:

NSArray *rootarr = [[NSArray alloc] init];
NSArray *array = [[NSArray alloc] initWithObjects:@"name", @"address", @"title", nil];
[rootarr setValue:array forKey:@"n"];
NSArray *getArr = [rootarr valueForKey:@"n"];

但是我得到的getArr数组与我设置的数组(数组)不相等。

你可以告诉我,我遇到了什么问题。什么是使用这些功能的方式?

4 个答案:

答案 0 :(得分:5)

NSArray' setValue:forKey:方法用于Key Value Coding,而不是将数组用作关联容器。您需要使用NSMutableDictionary

NSMutableDictionary *rootDict = [NSMutableDictionary dictionary];
NSArray *array = [[NSArray alloc] initWithObjects:@"name", @"address", @"title", nil];
[rootDict setValue:array forKey:@"n"];
NSArray *getArr = [rootDict valueForKey:@"n"];

答案 1 :(得分:0)

数组不是键值存储,您似乎希望将其用作键值存储。我想你想要一个NSDictionary(或者更确切地说是NSMutableDictionary,如果你想在它创建后修改它)。

答案 2 :(得分:0)

根据Apple documentation setValue:forKey:

使用指定的值和键在数组的每个项目上调用setValue:forKey:。

实际用途是当您要为数组的每个元素设置相同的值

UILabel *label1 = [[UILabel alloc]init];
UILabel *label2 = [[UILabel alloc]init];
NSArray *arr = @[label1, label2];
[arr setValue:@"bye" forKey:@"text"];
NSLog(@"%@ %@",label1.text, label2.text);   // bye bye 

在您的示例中,“ getArr”是一个空数组,因为您的“ rootarr”没有元素,否则您将收到setValue:forUndefinedKey:到包含的对象中,这些对象与分配的键不兼容

答案 3 :(得分:-1)

创建后,您无法将对象添加到NSArray。您必须使用NSMutableArray才能执行此操作。