[ https://issues.apache.org/jira/browse/CB-877?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13294703#comment-13294703 ]
Shazron Abdullah commented on CB-877: ------------------------------------- Two things to do here: 1. Remove pop usage in any core plugins. 2. Deprecate use of VERIFY_ARGUMENTS for 2.0 > Opening a .doc file under iOS causes the file system API to break (and any > other plugins that may use NSMutableArray pop) > ------------------------------------------------------------------------------------------------------------------------- > > Key: CB-877 > URL: https://issues.apache.org/jira/browse/CB-877 > Project: Apache Cordova > Issue Type: Bug > Components: iOS > Affects Versions: 1.4.0 > Environment: Simple project that opens a word document in iOS 5.0+ > Reporter: James Rose > Assignee: Shazron Abdullah > Priority: Critical > Fix For: 1.9.0 > > > After getting the UIWebView to navigate to a .doc the FileSystem API breaks. > in javascript: > FileSystem.root.getFile(<path to word document>, { create: false }, function > (fs_file){ > window.location = fs_file.toURI(); > } > Then in the shouldStartLoadWithRequest method open the word doc, and after x > seconds redirect it the home page again (faster than creating a new view > controller etc). > Once back on the home page try call any of the FileSystem API's and they > won't run the success or failure callbacks. > It seems that the control that opens the word documents overrides the > NSMutableArray pop implementation added in NSMutableArray+QueueAdditions, it > no longer returns the first element in the array, instead it returns the last > element (checking the function pointer for pop before/after opening the word > document returns different results). > CDVFile seems to be the only code where the pop method is used, and seems to > be the only part that is broken. > Suggested fix: rather than calling [arguments pop] use [arguments > objectAtIndex:0] > Side note: > Calling [arguments objectAtIndex:0] followed by VERIFY_ARGUMENTS won't call > the callbacks if they exist either, in the verifyArgument method in > CDVPlugin, if you pass a callbackId to the method it then does: > NSString* callbackId = [arguments objectAtIndex:0]; > and returns the failure to that callbackId rather than the one you specified, > since the callbackId has been removed from the array it will try callback on > the first parameter. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira