- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的应用程序中,有一个聊天服务。当用户想给新 friend 发消息时,他按下“新聊天”,然后会显示一个 TableView Controller 以从 friend 列表中进行选择。我正在使用 unwind segues 以返回到以前的 View Controller 并在两个 View Controller 之间共享数据(主要是数据将成为聊天的 friend )。 unwind segue 完美运行,但是在我的应用程序中,当用户返回主 VC 时,我触发一个新的 segue 以便直接转到用户聊天的另一个 VC;这是行不通的。所有 segues 都连接良好,我在每个角落都尝试了 NsLog,它正在进入那里,甚至 prepareForSegue: 正在被访问。我尝试放置一个 NsTimer,认为可能存在一些技术冲突,但没有成功。我将聊天 VC 的 segue 更改为模式,现在它给了我这个错误:
Warning: Attempt to present on whose view is not in the window hierarchy!
我可以通过其他方式访问这个 VC,它在层次结构中。我的问题是:可能出什么问题了? unwind segues 会改变 Windows 层次结构吗?
图片:
为了更直观地呈现问题,我正在谈论的主要 VC 在左下角连接到导航 View Controller 。当用户按下新聊天时,会显示右上角的两个 VC(一个用于在 friend 或群组之间进行选择,另一个用于显示 friend /群组)。因此,当从右上角的 VC 选择一个 friend 说时,我应该放松到主 VC。正如您可以从主 VC 中看到的那样,还有其他 segues。如果我放松 segue,它们都不能工作,如果我正常运行,它们就可以工作。
最佳答案
它不工作并给你错误的原因是因为事情没有按照你认为的顺序发生。
当展开发生时,可见的 View 还没有被关闭,因此您正在尝试对实际上不在该层次结构中的 View 执行 segue,就像错误所说的那样,例如,将 NSLog 语句放在最终 View ,然后在主视图 Controller 的 unwind 方法中,您可以看到以下内容:
2013-11-27 14:51:10.848 testUnwindProj[2216:70b] Unwind
2013-11-27 14:51:10.849 testUnwindProj[2216:70b] Will Appear
2013-11-27 14:51:11.361 testUnwindProj[2216:70b] View Did Disappear
因此主视图中的展开被调用, View 将出现(您的主视图 Controller ),然后您的可见 View 被关闭。这可能是一个简单的修复:
@interface ViewController () {
BOOL _unwindExecuted;
}
@end
@implementation ViewController
- (void)viewWillAppear:(BOOL)animated
{
NSLog(@"Will Appear");
if (_unwindExecuted) {
_unwindExecuted = NO;
[self performSegueWithIdentifier:@"afterunwind" sender:self];
}
}
- (IBAction)unwind:(UIStoryboardSegue *)segue
{
NSLog(@"Unwind");
_unwindExecuted = YES;
}
关于ios - 展开 segue/performSegueWithIdentifier : problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250481/
我的主视图 Controller 位于导航 Controller 中,它符合 EditViewControllerDelegate 协议(protocol)。这是我需要以模态方式呈现的两个 View
所以我在解决以下问题时遇到了一些棘手的问题。我可以使用 performSegueWithIdentifier使用如下代码在 View Controller 之间跳转: [self performSeg
我在 iOS7 中遇到问题,我用 performSegueWithIdentifier 调用 segue (我有这样的代码,几乎可以在其他任何地方使用),然后我将 segue 记录到 prepareF
我有一个带有按钮的 View Controller ,可以通过 STTwitter 启动 Twitter 登录页面。 . shouldPerformSegueWithIdentifier函数返回 NO
-(void)loginPerform { NSLog(@"start to perform segue!"); [self performSegueWithIdentifier:@"
我只是想问一下如何执行seguewithidentifier并打开一个新 View , 当信标位于应用程序范围内时。 请帮助我并提供示例和文档。谢谢。 最佳答案 您应该查看的教程: Ray Wende
因此,我尝试在窗口加载后立即执行转场,而无需单击按钮或执行任何操作。 Segue 是从 View Controller 链接的,但不是从窗口 Controller 链接的,因为我一次只能从 Windo
我有 6 个不同的表,当选择其中一个表中的行时(在 RegionFirstTable 中,哪个表很重要),我希望它们执行 Segue。 regionsFirstTable 的代码工作正常,但至于其他部
我只是构建了一个类来正确管理我的数据库和 JSON 请求。问题是,现在我该如何执行 segue ? 这是我的代码在我看来: - (IBAction)loginClick:(id)sender {
当我点击一个按钮时,我会运行这段代码: [self performSegueWithIdentifier:@"services" sender:self]; NSLog(@"ButtonClicked
我想通过 performSegueWithIdentifier(self.segueName, sender: products) 传递类型为 [Product] 的名为 products 的数组 我
您好,我正在尝试根据用户的选择推送到不同的 View 。我有一个 TableView ,其中有 4 个其他 View Controller 通过 Storyboard中的推送 segues 链接到它。
我有这样一个问题,当我点击按钮时,performSegueWithIdentifier() 会延迟工作,大约五秒钟,但是当我返回并再次点击按钮时,它会立即工作,没有任何延迟。 我想知道是否有 perf
我正在尝试使用 segue,这是我的代码: if let status_code = response.response?.statusCode { if status_code == 200
我已经阅读了很多关于这个问题的不同帖子,但似乎没有一个解决方案适合我。 我启动了一个新的应用程序,并将初始的 ViewController 放在导航 Controller 中。我创建了第二个 View
我正在 XCode 6 上使用框架 PARSE 设置注册/登录页面。 当我尝试执行一个 segue(它拼写正确)时,悬停,应用程序崩溃,即使 segue 在 if 语句中也是如此。 代码如下: imp
简单的测试显示了 performSegueWithIdentifier 之后的方法可以执行,但是做这个假设是否安全? Apple 文档未提及此主题。 例如,下面代码块中的print 语句在测试中执行。
我有一个项目,其中有一个 Storyboard。 Storyboard包含几个 View Controller 。我将简化它并省略不必要的细节。在 Navigation Controller 中,有几
我有这段代码可以使用信标更新距离。 func updateDistance(distance: CLProximity) { UIView.animateWithDuration(0.8) {
我的应用遇到了这种奇怪的情况。我在主线程上调用 performSegueWithIdentifier : dispatch_async(dispatch_get_main_queue()){
我是一名优秀的程序员,十分优秀!