在connectionDidFinishLoading完成后尝试使用performSegueWithIdentifier转换为ViewController

时间:2013-11-26 03:25:19

标签: objective-c ios6 uiviewcontroller segue

我有两个viewcontrollers mainVC和drop_downVC。我还有一个名为JSONutils的对象。用户将输入到mainVC视图控制器的文本字段中,然后在JSONutils中使用方法联系RESTful api,然后返回并解析JSON对象。当JSONutils中的connectionDidFinishLoading方法完成时,我想转到drop_downVC viewcontroller。一切都在努力试图脱离drop_downVC。从我一直在做的研究看来,使用performSegueWithIdentifier是可行的方法。下面是我试图在JSONutils的connectionDidFinishLoading方法中实现的代码。

//JSONutils.m
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

//NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
//NSLog(@"The receivedData is: %@", receivedData);

//JSON parsing code from here to

//here...

[self performSegueWithIdentifier:@"segue_drop_downVC" sender:self];

}//(void)connectionDidFinishLoading

上面的代码给出了以下错误。

No visible @interface for 'JSONutils' declares the selector 'performSegueWithIdentifier:sender:'

我已经搜索了此错误,但无法找到适用于我的具体解决方案的任何内容。

我创建了segue并使用post恰当地命名了segue标识符(segue_drop_downVC)。

我也将以下代码放在任何地方(JSONutils,mainVC),看看是否会改变任何东西,但它没有。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

//NSLog(@"The segue identifier is: %@", [segue identifier]);
//if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])

drop_downVC *nextViewController = [segue destinationViewController];
}

我没有太多使用Objective-C编程的经验,但是当我使用storyboard和segue在viewcontrollers之间移动时。当我使用故事板和segues时,当用户按下按钮时,我已经“segued”了。我从来没有等待数据返回然后导航到下一个viewcontroller。我的计划是继续将所有JSON操作和解析方法放在JSONutils文件中。所以我想将这些类型的方法保留在mainVC和drop_downVC之外。我一直在做研究,尝试不同的东西,但似乎无法得到它。非常感谢任何帮助或反馈!感谢。

2 个答案:

答案 0 :(得分:0)

performSegueWithIdentifier是UIViewController类的一个方法,因此如果您的JSONUtils类不是子类UIViewController,则无法将该消息发送给self。这就是错误所说的。

同样适用于prepareForSegue。

要解决您的问题,有几种选择。也许最简单的就是使用代表。

答案 1 :(得分:0)

您需要从视图控制器调用performSegueWithIdentifier,而不是JSONutils。我认为这样做的方法是在JSONutils中创建委托协议,并在创建JSONutils实例时让MainVC将其自身设置为委托。从connectionDidFinishLoading:

调用委托方法