Objective-C中来自URL的数组

时间:2015-05-26 21:04:48

标签: ios objective-c arrays uitableview parsing

我想从URL解决数组问题。 我在我的应用程序中使用JSON,我有一个单元格数组。 我的目标:如果您单击任何单元格,页面将在Safari中打开,其中包含来自JSON数组的URL。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier =@"LocationCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier];
    Location *location = [_locations objectAtIndex:indexPath.row];

    //...

    myCell.userInteractionEnabled = YES;
    UITapGestureRecognizer *gestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openUrl:)];
    gestureRec.numberOfTouchesRequired = 1;
    gestureRec.numberOfTapsRequired = 1;
    [myCell addGestureRecognizer:gestureRec];

    return cell;
}

- (void) openUrl: (id)sender: (Location *) location {
    UIGestureRecognizer *rec = (UIGestureRecognizer *)sender;
    id hitLabel = [self.view hitTest:[rec locationInView:self.view] withEvent:UIEventTypeTouches];

    if ([hitLabel isKindOfClass:[UILabel class]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString: location.url]];
    }
}

出了点问题,因为应用程序因此错误而崩溃:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController openUrl:]: unrecognized selector sent to instance 0x7fd3a850ad40'

但如果我在UITableViewCell中写这个:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: location.url]];
应用程序启动时,

链接将立即在Safari中打开。所以我认为JSON解析是正确的。

1 个答案:

答案 0 :(得分:4)

您已在ViewController

中实施此方法
- (void) openUrl:(id) sender:(Location *)location

但你要分配

@selector(openUrl:)

作为手势识别器的目标。这是另一种方法,因为缺少sender参数。

那就是说,你不需要手势识别器;只需实施didSelectRowAtIndexPath:的{​​{1}}方法:

UITableViewDelegate

(如果你真的希望只有当用户点击标签时才打开URL,而不是单元的其余部分,你需要手势识别器。但这是非常糟糕的用户体验。)