Ios 释放到HomeViewController的正确方法??不平衡误差

Ios 释放到HomeViewController的正确方法??不平衡误差,ios,uinavigationcontroller,segue,uistoryboardsegue,Ios,Uinavigationcontroller,Segue,Uistoryboardsegue,我有一个应用程序,我一直在努力与明显糟糕的教程,并被撕毁了一个新的上一个线程,所以有点担心再次发布。对不起,我总是从实践中学习 无论如何,我的登录、注册和其他功能都工作得很好。我只是有一个艰难的时间与条码扫描使用AVFoundation。我设置了我的流程 (来源:) 在扫描推送到ScanResultsViewController后,单击HomeViewController上的按钮切换到条形码ViewController [self.navigationController popToRootV

我有一个应用程序,我一直在努力与明显糟糕的教程,并被撕毁了一个新的上一个线程,所以有点担心再次发布。对不起,我总是从实践中学习

无论如何,我的登录、注册和其他功能都工作得很好。我只是有一个艰难的时间与条码扫描使用AVFoundation。我设置了我的流程


(来源:)

在扫描推送到ScanResultsViewController后,单击HomeViewController上的按钮切换到条形码ViewController

[self.navigationController popToRootViewControllerAnimated:YES];
ScanResultsViewController将发送JSON post数据并呈现响应,但由于我收到的错误,这里还没有任何内容。我这里的所有代码都是直接释放到HomeViewController的代码,而不必向后推(BarcodeView),然后再向后推(HomeView)

正如你所看到的,它可以工作,但它可以工作一次,也可以工作10次,然后我得到错误

2014-05-25 12:11:32.378 selfcheckin[3344:60b] QR Code = {"stop_id":"3","event_id":"1"}
2014-05-25 12:11:32.801 selfcheckin[3344:60b] StopReading Called
2014-05-25 12:11:32.812 selfcheckin[3344:60b] Made it to Success!!!
2014-05-25 12:11:42.615 selfcheckin[3344:60b] QR Code = {"stop_id":"3","event_id":"1"}
2014-05-25 12:11:43.322 selfcheckin[3344:60b] StopReading Called
2014-05-25 12:11:43.334 selfcheckin[3344:60b] Made it to Success!!!
2014-05-25 12:11:50.850 selfcheckin[3344:60b] QR Code = {"stop_id":"3","event_id":"1"}
2014-05-25 12:11:51.296 selfcheckin[3344:60b] StopReading Called
2014-05-25 12:11:51.308 selfcheckin[3344:60b] Made it to Success!!!
2014-05-25 12:11:51.349 selfcheckin[3344:60b] QR Code = {"stop_id":"3","event_id":"1"}
2014-05-25 12:11:51.352 selfcheckin[3344:60b] StopReading Called
2014-05-25 12:11:51.370 selfcheckin[3344:60b] nested push animation can result in corrupted navigation bar
2014-05-25 12:11:51.759 selfcheckin[3344:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2014-05-25 12:11:51.851 selfcheckin[3344:60b] Unbalanced calls to begin/end appearance transitions for <ScanResultsViewController: 0x14e86570>.
2014-05-25 12:11:32.378自检[3344:60b]二维码={“停止id”:“3”,“事件id”:“1”}
2014-05-25 12:11:32.801自签入[3344:60b]已调用停止读取
2014-05-25 12:11:32.812自我检查[3344:60b]成功了!!!
2014-05-25 12:11:42.615自检[3344:60b]二维码={“停止id”:“3”,“事件id”:“1”}
2014-05-25 12:11:43.322自签入[3344:60b]停止读取呼叫
2014-05-25 12:11:43.334自签成功了!!!
2014-05-25 12:11:50.850自检[3344:60b]二维码={“停止id”:“3”,“事件id”:“1”}
2014-05-25 12:11:51.296自签入[3344:60b]停止读取呼叫
2014-05-25 12:11:51.308自签成功!!!
2014-05-25 12:11:51.349自检[3344:60b]二维码={“停止id”:“3”,“事件id”:“1”}
2014-05-25 12:11:51.352自签入[3344:60b]停止读取呼叫
2014-05-25 12:11:51.370自签入[3344:60b]嵌套推送动画可能导致导航栏损坏
2014-05-25 12:11:51.759自签入[3344:60b]在意外状态下完成导航转换。导航栏子视图树可能已损坏。
2014-05-25 12:11:51.851 selfcheckin[3344:60b]开始/结束外观转换的不平衡调用。
所以我的主要问题是如何从ResultsView返回HomeView。我很想关掉NavigationController看看我能不能不用它。任何关于我可能出错的地方或正确方法的指示


Thx

您可以使用导航控制器上的
popToRootViewController
返回第一视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

您可以在导航控制器上使用
popToRootViewController
返回到第一个视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

您可以在导航控制器上使用
popToRootViewController
返回到第一个视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

您可以在导航控制器上使用
popToRootViewController
返回到第一个视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

看起来您几乎同时将两个
ScanResultsViewController
s推到导航堆栈上,这将损坏导航栏并导致展开分段中断

我打赌发生这种情况的原因是因为您的
BarcodeViewController
正在扫描条形码/QR码,但在找到条形码/QR码后不会停止扫描。成功找到条形码后,请确保停止扫描条形码(或至少设置一个标志),以确保只按一个
ScanResultsViewController

不久前,当我在我的一个应用程序中实现二维码扫描仪时,同样的问题也发生在我身上。如果发现条形码/二维码,将调用以下方法(我正在使用,仅供参考);您的
条形码视图控制器中可能有类似的方法:

- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result
{
    if (result) {
        [self performSegueWithIdentifier:@"ScanResults"];
    }
}
这里的问题是,即使在调用执行segue之后,这个方法也可能再次被调用,这意味着我有时会执行两次segue。为了阻止这种情况,我只需记住我已经找到了一个类似这样的条形码,就有效地阻止了这种情况:

- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result
{
    if (result && !self.foundBarcode) {
        self.foundBarcode = YES;
        [self performSegueWithIdentifier:@"ScanResults"];
    }
}

。。。这阻止了两次执行segue。我想您的情况可能非常相似。

看起来您几乎同时将两个
ScanResultsViewController
s推到导航堆栈上,这将损坏导航栏并导致展开分段中断

我打赌发生这种情况的原因是因为您的
BarcodeViewController
正在扫描条形码/QR码,但在找到条形码/QR码后不会停止扫描。成功找到条形码后,请确保停止扫描条形码(或至少设置一个标志),以确保只按一个
ScanResultsViewController

不久前,当我在我的一个应用程序中实现二维码扫描仪时,同样的问题也发生在我身上。如果发现条形码/二维码,将调用以下方法(我正在使用,仅供参考);您的
条形码视图控制器中可能有类似的方法:

- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result
{
    if (result) {
        [self performSegueWithIdentifier:@"ScanResults"];
    }
}
这里的问题是,即使在调用执行segue之后,这个方法也可能再次被调用,这意味着我有时会执行两次segue。为了阻止这种情况,我只需记住我已经找到了一个类似这样的条形码,就有效地阻止了这种情况:

- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result
{
    if (result && !self.foundBarcode) {
        self.foundBarcode = YES;
        [self performSegueWithIdentifier:@"ScanResults"];
    }
}

。。。这阻止了两次执行segue。我想您的情况可能非常相似。

看起来您几乎同时将两个
ScanResultsViewController
s推到导航堆栈上,这将损坏导航栏并导致展开分段中断

我打赌发生这种情况的原因是因为您的
BarcodeViewController
正在扫描条形码/QR码,但在找到条形码/QR码后不会停止扫描。成功找到条形码后,请确保停止扫描条形码(或至少设置一个标志),以确保只按一个
ScanResultsViewController