Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 块中具有动作的UITapGestureRecognitor_Ios_Objective C_Xcode - Fatal编程技术网

Ios 块中具有动作的UITapGestureRecognitor

Ios 块中具有动作的UITapGestureRecognitor,ios,objective-c,xcode,Ios,Objective C,Xcode,我有一个迭代来处理JSON提供的_id值,并将操作分配给列表中的每个元素。我的问题是,当我点击元素后,变量_id总是为nil。有没有办法将_id的当前迭代值分配给每个点击 int i=0; for (NSDictionary *item in json) { NSString *_id = [item objectForKey:@"_id"]; //Main container // UIView *temp_container = [[UIView alloc

我有一个迭代来处理JSON提供的_id值,并将操作分配给列表中的每个元素。我的问题是,当我点击元素后,变量_id总是为nil。有没有办法将_id的当前迭代值分配给每个点击

int i=0;
for (NSDictionary *item in json) {
    NSString *_id = [item objectForKey:@"_id"];

    //Main container
    //
    UIView *temp_container = [[UIView alloc] init];
    temp_container.frame = CGRectMake(0, i*76, 320, 75);
    temp_container.userInteractionEnabled = YES;
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:[^{ NSLog(@"id value: %@", _id); } copy] action:@selector(invoke)];
    tap.numberOfTapsRequired = 1;
    [temp_container addGestureRecognizer:tap];
    i++;
}
以下是控制台输出:

2014-08-26 18:17:32.511 appTwo[33519:60b] -[__NSArrayM invoke]: unrecognized selector sent to instance 0x91b6210
2014-08-26 18:17:32.515 appTwo[33519:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM invoke]: unrecognized selector sent to instance 0x91b6210'

你把临时容器添加到superview了吗?是的,我就是这样测试点击动作的。我只是不想包含UI代码的所有其余部分。请尝试一下\uuu block NSString*\u id=[[item objectForKey:@\u id]copy]?我建议使用temp_container.tag或使用_id将视图存储在可变字典中,并在self上编写一个单独的方法,而且我相信target:[^{}copy]invoke使用私有方法