我有两个名为
的应用程序这是我的 ReceiveDataApp
的StoryBoard我可以将数据发送到我的接收应用,并可以通过以下方法处理它,
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options;
但是,问题是我想将我从 SendDataApp 收到的数据显示到 ReceivedDataApp 的DetailViewController
我尝试使用以下方法处理它,
Appdelegate.m
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewController *viewController = (ViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"View"];
[viewController receivedURL:url];
return YES;
}
ViewController.m
- (void)receivedURL:(NSURL *)url {
[self performSegueWithIdentifier:@"detailIdentifier" sender:url];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"detailIdentifier"]) {
DetailViewController *detail = [segue destinationViewController];
detail.receivingURL = (NSURL *)sender;
}
}
但是,它给了我一些错误
由于未捕获的异常终止应用程序&#39; NSGenericException&#39;,原因:&#39;无法找到segue&#39; detailIdentifier&#39;的导航控制器。 Push segues只能在源控制器由UINavigationController实例管理时使用。
我的两个viewcontrollers仅嵌入UINavigationController
。并且,通常我可以通过按钮操作查看详细信息页面。但是,不是通过网址计划
这里的错误是什么?而且,我在这里做错了吗?
给我一些建议或想法来解决这个问题。
答案 0 :(得分:0)
您在AppDelegate的ViewController
方法中实例化openURL
,当openURL
方法返回时,ARC会立即释放视图控制器。它不能存活足够长的时间才能添加到导航控制器
您真正需要做的是获取当前显示的视图控制器(可能是您的&#34; View Controller
&#34;),然后执行此操作。
换句话说,在你的app delegate:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
UIViewController *rootvc = self.window.rootViewController;
// make sure the root view controller is the ViewController class you want
if ([rootvc isKindOfClass: [ViewController class]])
{
ViewController * vc = (ViewController *)rootvc;
[vc receivedURL:url];
}
return YES;
}
您可以查看我尝试使用答案in this question和this question的更多信息。
最后,你真的 必须 将你的子视图控制器重命名为超级通用&#34; View Controller&#34;和&#34;细节视图控制器&#34;名。