如何使用存储在数组中的URL从应用程序打开网站到Safari?

时间:2012-01-17 17:52:40

标签: arrays ipad safari nsurl

大家好我正在使用iPad应用程序,我需要一些建议。

我有一个存储用户在线信息的数组,其中一个数据是URL。 信息列表显示在主详细信息表视图中,一旦选中,它将填充详细信息视图以显示其所有信息,其中一个是URL。我希望能够通过点击一个按钮进入显示的URL,该按钮将带我进入Safari并显示该网页。

下面是问题所在:

-(IBAction)loginClicked:(id)sender{
NSLog(@"loginClicked");

//--What should i replace indexPath.row with so that it will point to the current selected row?
loginObj = [appDelegate.loginArray objectAtIndex:indexPath.row];

//--if the above indexPath.row is replaced with an integer, the NSLog is able to print out the correct URL of that row
NSLog(@"URL = %@", loginObj.loginURL);

//--then when i insert loginObj.loginURL, it gives me error "too many arguments method to call, expected 1, have 2" but when i insert a proper URL @"http://www.google.com" it has no problem opening it up.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"%@", loginObj.loginURL]];

}

loginURL在我的班级中被声明为NSString。

我正在使用SDK4.2 iOS5,带有故事板的iPad主详细视图模板

2 个答案:

答案 0 :(得分:0)

在接口文件中声明如下所示的整数

int theCurrentSelectedRow;

在didSelectRow方法中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
   theCurrentSelectedRow = indexPath.row; 
}

如下所示改变您的方法,

-(IBAction)loginClicked:(id)sender{
NSLog(@"loginClicked");

loginObj = [appDelegate.loginArray objectAtIndex:theCurrentSelectedRow];

NSLog(@"URL = %@", loginObj.loginURL);

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"%@", loginObj.loginURL]];

}

我们的想法是将当前选定的行索引存储在全局变量中,并且访问权限在您的方法中使用它。

答案 1 :(得分:0)

+[NSURL URLWithString:]不支持可变参数。您应该至少收到编译器警告,这段代码不正确

[NSURL URLWithString: @"%@", loginObj.loginURL]

相反,要构建一个URL,只需:

[NSURL URLWithString:loginObj.loginURL]

更好的是,更新您的模型类以直接处理NSURL