【问题标题】:failed to perform a ViewController's segue from AppDelegate by using delegate无法使用委托从 AppDelegate 执行 ViewController 的 segue
【发布时间】:2014-07-26 01:28:12
【问题描述】:

我正在尝试使用委托从AppDelegate 调用ViewController 的segue。我想确保在执行 segue 之前存储了 xmppRoster。有一个错误说:

“由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'Receiver () has no segue with identifier '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];
}

【问题讨论】:

  • ViewController 是在哪里制作的?在故事板或 xib 中?在代码中?
  • Segues 在故事板中工作。在这里,您只是在代码中初始化一个视图控制器,并期望它的行为就像在故事板中一样。
  • segue内置在storyboard中并连接到ViewController,我现在无法发布图片,因为我的声誉不够,sorry

标签: ios delegates segue appdelegate


【解决方案1】:

分配和初始化一个新的 ViewController 不会给你故事板中的任何数据。您需要从您的 nib 加载 ViewController。

How can I load storyboard programmatically from class?

我仍然不得不质疑你在做什么。即使您想等到您的花名册完成后再执行转场,最好将执行转场的 ViewController 设为 xmppRoster 的委托,以便您从实际​​具有转场的对象执行转场。

【讨论】:

  • xmppRosterDidEndPopulating 方法只在 AppDelegate 中有效,我不知道如何让它在 ViewController 中工作,如果你的意思是“让执行 segue 的 ViewController 成为 xmppRoster 的代表”
  • 那么你的具有 segue 的 ViewController 也应该符合 XMPPRosterDelegate 协议,然后将它添加到你的 XMPPRoster 的 multicastDelefgate 中。
猜你喜欢
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多