无法使用委托从AppDelegate执行ViewController的segue

时间:2014-07-26 01:28:12

标签: ios delegates segue appdelegate

我试图通过使用委托从ViewController拨打AppDelegate的segue。我想确保在执行segue之前存储xmppRoster。有一个错误说:

  

"因未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' Receiver()没有带标识符的segue' segueForList''""

我确定segueForList是正确的segue标识符,因为代码 [self performSegueWithIdentifier:@"segueForList" sender:self]在不使用委托时有效。

segue内置于一个故事板并连接到ViewController,我现在无法发布图片,因为我的声誉不够,对不起

AppDelegate.h:

@protocol friendListSegue
- (void) ListSegue;
@end

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (assign,nonatomic) id<friendListSegue> delegate;
@end

在AppDelegate.m中,系统完成存储时会自动调用此方法:

- (void)xmppRosterDidEndPopulating:(XMPPRoster *)sender
{
   ViewController * view0=[[ViewController alloc] init];
   self.delegate = view0;
   [self.delegate ListSegue];
   NSLog(@"didStored");
}

ViewController.m:

- (void) ListSegue{
   NSLog(@"segue_List");
   [self performSegueWithIdentifier:@"segueForList" sender:self];
}

1 个答案:

答案 0 :(得分:0)

分配和初始化新的ViewController不会在storyboard中提供任何数据。您需要从笔尖加载ViewController。

How can I load storyboard programmatically from class?

我仍然要质疑你在做什么。即使你想要在执行segue之前等到你的名单之后,最好还是让执行segue的ViewController成为xmppRoster的委托,这样你就可以从实际拥有segue的对象中执行segue。 / p>