[ https://issues.apache.org/jira/browse/CB-7906?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vladimir Kotikov updated CB-7906: --------------------------------- Labels: documentation-update iOS reproduced triaged (was: documentation-update iOS) > App crashes when find() is called with undefined desiredField members > --------------------------------------------------------------------- > > Key: CB-7906 > URL: https://issues.apache.org/jira/browse/CB-7906 > Project: Apache Cordova > Issue Type: Bug > Components: Plugin Contacts > Environment: iOS 7, iOS 8 > Cordova 3.6.0 > Reporter: Shingo Toda > Labels: documentation-update, iOS, reproduced, triaged > > Apps crash when find() is called with undefined members of ContactFieldType. > For example, the following code sets desiredFields to {{xx}} or {{yyy}} which > are actually not defined in ContactFieldType. > {code:javascript} > options.desiredFields = [navigator.contacts.fieldType.xx, > navigator.contacts.fieldType.yyy]; > var fields = [navigator.contacts.fieldType.displayName, > navigator.contacts.fieldType.name]; > navigator.contacts.find(fields, onSuccess, onError, options); > {code} > In Objective-C code, those undefined members are turned into {{NSNull}} > object. Therefore {{calcReturnFields}} method receives {{fieldArray}} which > contains {{NSNull}} objects, then analyses {{fieldStr}} NSString object which > is actually {{NSNull}} at {{[fieldStr componentsSeparatedByString:@"."]}} and > eventually an app crashes. > I tweaked {{calcReturnFields}} method to ignore {{NSNull}} object as below > and this looks working fine. > {code:title=CDVContact.m} > for (id i in fieldsArray) { > NSMutableArray* keys = nil; > NSString* fieldStr = nil; > if ([i isKindOfClass:[NSNumber class]]) { > fieldStr = [i stringValue]; > // ST modified start > } else if([i isEqual:[NSNull null]]){ > continue; > // ST modified end > } else { > fieldStr = i; > } > {code} > By this modification, all invalid desiredField types are ignored and those > types could be thought to be "not found". In my opinion, this behaviour would > make sense to developer as {{find()}} is called with dodgy desiredField > parameters then those types shouldn't be included in the returned contact > data. As far as I know, at least {{find()}} for Android behaves like this. > By the way, I couldn't see supported parameters for {{desiredField}} in > document. If I look at {{ContactFieldType.js}}, those members are populated > from {{Contact}}, {{ContactAddress}}, etc.. It would be nice to clearly > describe all supported types. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org