获取valueForKey返回(null)

时间:2013-11-02 06:41:28

标签: objective-c

我正在尝试在NSArray中放置一个值,然后再次接收它。这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [_system setValue:[_objects objectAtIndex:indexPath.row] forKey:@"selected"];
    NSLog(@"%@", [_objects objectAtIndex:indexPath.row]);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"%@", [_system valueForKey:@"selected"]);
}

以下是日志结果:

2013-11-01 23:38:04.210 ClassPoints[187:60b] test
2013-11-01 23:38:04.211 ClassPoints[187:60b] (null)

我发现奇怪的是,即使在void中创建数组也没有正确加载该值。

NSArray *testArray;
[testArray setValue:@"test" forKey:@"test"];
NSLog(@"%@", [testArray valueForKey:@"test"]);

有人可以对此有所了解吗?我完全迷失了。谢谢!

4 个答案:

答案 0 :(得分:1)

NSArray成为NSMutableArray,以便您可以在其中修改对象,并且在viewDidLoad中不要忘记初始化它。

-(void)viewDidLoad {
    myMutableArray = [[NSMutableArray alloc] init];
}

答案 1 :(得分:0)

初始化NSArray后,您将无法在其上添加/删除/编辑对象。这就是NSMutableArray的用途。

答案 2 :(得分:0)

尝试使用此NSMutableArray并设置使用setObject api,尽管设置了setValue。

 NSMutableArray *testArray = [NSMutableArray array];
 [testArray setObject:@"test" forKey:@"test"];
 NSLog(@"%@", [testArray objectForKey:@"test"]);

答案 3 :(得分:0)

首先,您需要使用要使用的集合类型的可变版本,然后需要分配和初始化它们。除非您的_system(NSArray?)包含符合“selected”的键值编码的对象。 setValue:forKey在每个数组元素上调用setValue:forKey。这同样适用于valueForKey:。这就是为什么你的孤立的例子也不会工作。我想你想要一个NSMutableDictionary然后你可以通过键获取/设置对象,而数组只能用于索引。

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:yourObject forKey:yourKey];
id obj = [dictionary objectForKey:yourKey];