Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
iOS 7, iOS 8
Cordova 3.6.0
Description
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.
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);
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.
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; }
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.
Attachments
Issue Links
- relates to
-
CB-10053 Update documentation for 'find' method with available 'desiredFields' option value
- Closed