2

我正在尝试使用这些功能-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

4 回答 4

5

NSArraysetValue:forKey:方法用于键值编码,而不是使用数组作为关联容器。你需要使用NSMutableDictionary.

NSMutableDictionary *rootDict = [NSMutableDictionary dictionary];
NSArray *array = [[NSArray alloc] initWithObjects:@"name", @"address", @"title", nil];
[rootDict setValue:array forKey:@"n"];
NSArray *getArr = [rootDict valueForKey:@"n"];
于 2012-05-17T01:43:32.137 回答
0

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

于 2012-05-17T01:43:36.780 回答
0

根据苹果文档 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:不符合分配键的包含对象

于 2018-10-21T13:57:17.413 回答
-1

创建对象后,您无法将对象添加到NSArray其中。你必须使用NSMutableArray才能做到这一点。

于 2012-05-17T01:42:48.857 回答