[ 
https://issues.apache.org/jira/browse/CB-11975?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Forrest updated CB-11975:
--------------------------------
    Description: 
I was trying to retrieve a specific contact by id in my Ionic/Cordova app, so 
used the following code:
{code:javascript}
return Contacts.find(
        ['id'],
        {filter: contactId, multiple: true})
{code}

However, this crashes the iOS app at runtime with:

{noformat}
2016-10-07 17:33:12.331 MyApp[10998:1880417] -[__NSCFNumber isEqualToString:]: 
unrecognized selector sent to instance 0xb000000000000053
2016-10-07 17:33:12.337 MyApp[10998:1880417] *** Terminating app due to 
uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber 
isEqualToString:]: unrecognized selector sent to instance 0xb000000000000053'
*** First throw call stack:
(
        0   CoreFoundation                      0x000000010b0f334b 
__exceptionPreprocess + 171
        1   libobjc.A.dylib                     0x000000010ab2b21e 
objc_exception_throw + 48
        2   CoreFoundation                      0x000000010b162f34 
-[NSObject(NSObject) doesNotRecognizeSelector:] + 132
        3   CoreFoundation                      0x000000010b078c15 
___forwarding___ + 1013
        4   CoreFoundation                      0x000000010b078798 
_CF_forwarding_prep_0 + 120
        5   MyApp                               0x00000001097217b7 
__22-[CDVContacts search:]_block_invoke_2 + 983
        6   MyApp                               0x0000000109723760 
__42-[CDVAddressBookHelper createAddressBook:]_block_invoke_2 + 368
        7   libdispatch.dylib                   0x000000010e4450cd 
_dispatch_client_callout + 8
        8   libdispatch.dylib                   0x000000010e4275e5 
_dispatch_barrier_sync_f_slow_invoke + 617
        9   libdispatch.dylib                   0x000000010e4450cd 
_dispatch_client_callout + 8
        10  libdispatch.dylib                   0x000000010e4258d6 
_dispatch_main_queue_callback_4CF + 406
        11  CoreFoundation                      0x000000010b0b74f9 
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
        12  CoreFoundation                      0x000000010b07cf8d 
__CFRunLoopRun + 2205
        13  CoreFoundation                      0x000000010b07c494 
CFRunLoopRunSpecific + 420
        14  GraphicsServices                    0x00000001107aea6f 
GSEventRunModal + 161
        15  UIKit                               0x000000010be0df34 
UIApplicationMain + 159
        16  MyApp                               0x000000010962e531 main + 65
        17  libdyld.dylib                       0x000000010e49168d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
{noformat}

Seems to only fail when {{contactId}} is a JavaScript number. Converting it to 
a string before searching ({{contactId+""}}) works fine.

Fault originally occurred because Contact {{id}} field in iOS is an integer… 
and it looks like I’m getting a JavaScript number value out of the Contacts 
API. Was storing this integer in SQLite (which preserves the data type), 
getting an integer back out, and passing it back into the {{Contacts.find()}} 
API.

Suggest:
 * Contacts {{id}} field is supposed to return a string, so it should return a 
string on iOS
 * {{Contacts.find()}} should coerce its arguments to correct types before 
calling native code.

  was:
I was trying to retrieve a specific contact by id in my Ionic/Cordova app, so 
used the following code:
{code:javascript}
return Contacts.find(
        ['id'],
        {filter: contactId, multiple: true})
{code}

However, this crashes the iOS app at runtime with:

{noformat}
2016-10-07 17:33:12.331 MyApp[10998:1880417] -[__NSCFNumber isEqualToString:]: 
unrecognized selector sent to instance 0xb000000000000053
2016-10-07 17:33:12.337 MyApp[10998:1880417] *** Terminating app due to 
uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber 
isEqualToString:]: unrecognized selector sent to instance 0xb000000000000053'
*** First throw call stack:
(
        0   CoreFoundation                      0x000000010b0f334b 
__exceptionPreprocess + 171
        1   libobjc.A.dylib                     0x000000010ab2b21e 
objc_exception_throw + 48
        2   CoreFoundation                      0x000000010b162f34 
-[NSObject(NSObject) doesNotRecognizeSelector:] + 132
        3   CoreFoundation                      0x000000010b078c15 
___forwarding___ + 1013
        4   CoreFoundation                      0x000000010b078798 
_CF_forwarding_prep_0 + 120
        5   MyApp                       0x00000001097217b7 __22-[CDVContacts 
search:]_block_invoke_2 + 983
        6   MyApp                       0x0000000109723760 
__42-[CDVAddressBookHelper createAddressBook:]_block_invoke_2 + 368
        7   libdispatch.dylib                   0x000000010e4450cd 
_dispatch_client_callout + 8
        8   libdispatch.dylib                   0x000000010e4275e5 
_dispatch_barrier_sync_f_slow_invoke + 617
        9   libdispatch.dylib                   0x000000010e4450cd 
_dispatch_client_callout + 8
        10  libdispatch.dylib                   0x000000010e4258d6 
_dispatch_main_queue_callback_4CF + 406
        11  CoreFoundation                      0x000000010b0b74f9 
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
        12  CoreFoundation                      0x000000010b07cf8d 
__CFRunLoopRun + 2205
        13  CoreFoundation                      0x000000010b07c494 
CFRunLoopRunSpecific + 420
        14  GraphicsServices                    0x00000001107aea6f 
GSEventRunModal + 161
        15  UIKit                               0x000000010be0df34 
UIApplicationMain + 159
        16  MyApp                       0x000000010962e531 main + 65
        17  libdyld.dylib                       0x000000010e49168d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
{noformat}

Seems to only fail when {{contactId}} is a JavaScript number. Converting it to 
a string before searching ({{contactId+""}}) works fine.

Fault originally occurred because Contact {{id}} field in iOS is an integer… 
and it looks like I’m getting a JavaScript number value out of the Contacts 
API. Was storing this integer in SQLite (which preserves the data type), 
getting an integer back out, and passing it back into the {{Contacts.find()}} 
API.

Suggest:
 * Contacts {{id}} field is supposed to return a string, so it should return a 
string on iOS
 * {{Contacts.find()}} should coerce its arguments to correct types before 
calling native code.


> Search on Contacts ‘id’ field with JavaScript number type crashes in iOS
> ------------------------------------------------------------------------
>
>                 Key: CB-11975
>                 URL: https://issues.apache.org/jira/browse/CB-11975
>             Project: Apache Cordova
>          Issue Type: Bug
>            Reporter: Andrew Forrest
>
> I was trying to retrieve a specific contact by id in my Ionic/Cordova app, so 
> used the following code:
> {code:javascript}
> return Contacts.find(
>       ['id'],
>       {filter: contactId, multiple: true})
> {code}
> However, this crashes the iOS app at runtime with:
> {noformat}
> 2016-10-07 17:33:12.331 MyApp[10998:1880417] -[__NSCFNumber 
> isEqualToString:]: unrecognized selector sent to instance 0xb000000000000053
> 2016-10-07 17:33:12.337 MyApp[10998:1880417] *** Terminating app due to 
> uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber 
> isEqualToString:]: unrecognized selector sent to instance 0xb000000000000053'
> *** First throw call stack:
> (
>       0   CoreFoundation                      0x000000010b0f334b 
> __exceptionPreprocess + 171
>       1   libobjc.A.dylib                     0x000000010ab2b21e 
> objc_exception_throw + 48
>       2   CoreFoundation                      0x000000010b162f34 
> -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
>       3   CoreFoundation                      0x000000010b078c15 
> ___forwarding___ + 1013
>       4   CoreFoundation                      0x000000010b078798 
> _CF_forwarding_prep_0 + 120
>       5   MyApp                               0x00000001097217b7 
> __22-[CDVContacts search:]_block_invoke_2 + 983
>       6   MyApp                               0x0000000109723760 
> __42-[CDVAddressBookHelper createAddressBook:]_block_invoke_2 + 368
>       7   libdispatch.dylib                   0x000000010e4450cd 
> _dispatch_client_callout + 8
>       8   libdispatch.dylib                   0x000000010e4275e5 
> _dispatch_barrier_sync_f_slow_invoke + 617
>       9   libdispatch.dylib                   0x000000010e4450cd 
> _dispatch_client_callout + 8
>       10  libdispatch.dylib                   0x000000010e4258d6 
> _dispatch_main_queue_callback_4CF + 406
>       11  CoreFoundation                      0x000000010b0b74f9 
> __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
>       12  CoreFoundation                      0x000000010b07cf8d 
> __CFRunLoopRun + 2205
>       13  CoreFoundation                      0x000000010b07c494 
> CFRunLoopRunSpecific + 420
>       14  GraphicsServices                    0x00000001107aea6f 
> GSEventRunModal + 161
>       15  UIKit                               0x000000010be0df34 
> UIApplicationMain + 159
>       16  MyApp                               0x000000010962e531 main + 65
>       17  libdyld.dylib                       0x000000010e49168d start + 1
> )
> libc++abi.dylib: terminating with uncaught exception of type NSException
> (lldb) 
> {noformat}
> Seems to only fail when {{contactId}} is a JavaScript number. Converting it 
> to a string before searching ({{contactId+""}}) works fine.
> Fault originally occurred because Contact {{id}} field in iOS is an integer… 
> and it looks like I’m getting a JavaScript number value out of the Contacts 
> API. Was storing this integer in SQLite (which preserves the data type), 
> getting an integer back out, and passing it back into the {{Contacts.find()}} 
> API.
> Suggest:
>  * Contacts {{id}} field is supposed to return a string, so it should return 
> a string on iOS
>  * {{Contacts.find()}} should coerce its arguments to correct types before 
> calling native code.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to