[
https://issues.apache.org/jira/browse/CB-9347?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15144222#comment-15144222
]
ASF GitHub Bot commented on CB-9347:
------------------------------------
Github user jcesarmobile commented on the pull request:
https://github.com/apache/cordova-plugin-dialogs/pull/54#issuecomment-183218924
It's supposed to be recursive. If count > 1 it just stores it on the array
(line 100), then, once it's presented (line 230), removes the presented
alertController from the array (line 231), and if the array contains any other
alertController on the array (line 232), it calls presentAlertcontroller again
(line 233).
I've tested and the problem is on the barcode scanner plugin, it returns
the success or error callbacks right after calling
dismissViewControllerAnimated, and dismissViewControllerAnimated takes a while,
so the alert tries to present the dialog on the CDVbcsViewController that is
being dismissed, so you get this error:
Warning: Attempt to present <UIAlertController: 0x14f913bd0> on
<CDVbcsViewController: 0x14f90c830> whose view is not in the window hierarchy!
The solution should be not to return the callbacks until the
CDVbcsViewController is dismissed. Than can be done with a block like this:
`- (void)barcodeScanDone:(void (^)(void))callbackBlock {
self.capturing = NO;
[self.captureSession stopRunning];
[self.parentViewController dismissViewControllerAnimated:YES
completion:callbackBlock];
// viewcontroller holding onto a reference to us, release them so they
// will release us
self.viewController = nil;
}`
and every call to barcodeScanDone should pass the block as parameter
example:
`[self barcodeScanDone:^{
[self.plugin returnSuccess:text format:format cancelled:FALSE
flipped:FALSE callback:self.callback];
}];`
I'll try to send a pull request to the barcode scanner plugin with this fix
this afternoon.
> You can no longer stack alerts in cordova-plugin-dialogs - commit #ee3b02b3
> has caused this
> -------------------------------------------------------------------------------------------
>
> Key: CB-9347
> URL: https://issues.apache.org/jira/browse/CB-9347
> Project: Apache Cordova
> Issue Type: Bug
> Components: Plugin Dialogs
> Affects Versions: 1.1.0
> Environment: Mac OS X Yosemite 10.10.4; XCode 6.4 iOS
> Reporter: Kelvin Dart
> Assignee: jcesarmobile
> Priority: Critical
>
> Previously in cordova-plugin-dialogs, you could stack alerts in Cordova like
> follows:
> {code}
> navigator.notification.alert('Notification 1', function () {}, 'Title 1');
> navigator.notification.alert('Notification 2', function () {}, 'Title 2');
> {code}
> And it would show 'Notification 2' then 'Notification 1'.
> Now you cannot, in commit: #ee3b02b3c78debe608263d847f7ac69bda1bfca0, there
> was quite a large overhaul in {{showDialogWithMessage}} in
> {{CDVNotification.m}}; this commit seems to add some code for iOS 8.3+ which
> uses {{UIAlertController}} instead of the old {{UIAlertView}}. The problem is
> here - unfortunately I do not know Obj-C too well in order to debug it.
> If you revert to a cordova-plugin-dialogs version prior to this, the stacked
> notifications work fine.
> I have created a small test harness which you can download
> [here|https://www.dropbox.com/s/62hdp3gjp2924er/CDVDialogsNotificationBug.zip?dl=0].
> Please could you implement the old behaviour as this has cause some aspects
> of my app to break - thanks!
> N.b. I have tagged the version as 1.1.0 as it would not allow me to tag 1.1.1.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]