我有两个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之外。我一直在做研究,尝试不同的东西,但似乎无法得到它。非常感谢任何帮助或反馈!感谢。
答案 0 :(得分:0)
performSegueWithIdentifier是UIViewController类的一个方法,因此如果您的JSONUtils类不是子类UIViewController,则无法将该消息发送给self。这就是错误所说的。
同样适用于prepareForSegue。
要解决您的问题,有几种选择。也许最简单的就是使用代表。
答案 1 :(得分:0)
您需要从视图控制器调用performSegueWithIdentifier,而不是JSONutils。我认为这样做的方法是在JSONutils中创建委托协议,并在创建JSONutils实例时让MainVC将其自身设置为委托。从connectionDidFinishLoading:
调用委托方法