When running in the Xcode debugger, it always stops on these EXC_BAD_ACCESS
signals.  When running on device (without Xcode debugger), it catches the
signal and throws an NPE.

> I debugged in IntelliJ Idea and followed the pointers and they are not
null

With a WeakReference you cannot count on the reference being maintained -
it could be set to null at any time.  You need to check the value of the
reference before using it, or you will get an NPE.

Solution is simple:  Always check the values of weak references before
using them to make sure they're not null.

On Mon, May 3, 2021 at 8:35 AM 'P5music' via CodenameOne Discussions <
[email protected]> wrote:

> We are talking of Java, so the fact that some reference could be null is
> not already an error, indeed only if it is null at runtime there is NPE.
> Unless something in the "compiled" XCode project does not like weak
> references (or things that can in theory be null) so it complains.
> But this is at runtime, so it is complaining at runtime when that value is
> not null, at least not because of the app Java instructions, said that the
> same code with no modifications is perfectly running in the simulator and
> Android device and iOS real device.
> I debugged in IntelliJ Idea and followed the pointers and they are not
> null. I knew it already, the instructions sequence is very simple, it is
> done on app startup and it is the same on every platform, no room for
> leaving any null pointer.
>
> Otherwise I do not understand what you really mean. Please explain.
> Regards
>
> Il giorno lunedì 3 maggio 2021 alle 15:13:47 UTC+2 Steve Hannah ha scritto:
>
>> > appData is a weak reference but nothing is null
>>
>> ((AppData)appData.get()).appVersion
>>
>> If appData is a weak reference, then appData.get() may be null.
>>
>>
>>
>> On Mon, May 3, 2021 at 6:01 AM 'P5music' via CodenameOne Discussions <
>> [email protected]> wrote:
>>
>>> appVersion is just a string, appData is a weak reference but nothing is
>>> null, as I said the app works outside of the iOS simulator.
>>> I think that it does not like weak references.
>>> What could be the cause of the NPE? Maybe those pointers?
>>> Maybe the weak reference is not created at all in the translated code
>>> (build bug)?
>>> Regards
>>> Il giorno lunedì 3 maggio 2021 alle 13:27:51 UTC+2 Steve Hannah ha
>>> scritto:
>>>
>>>> When running with the debugger (in Xcode) it will stop on these error.
>>>> When running normally, it "catches" them and proceeds.
>>>>
>>>> ((AppData)appData.get()).appVersion
>>>>
>>>> That doesn't look safe.  You say appData is a weak reference? Then
>>>> get() may return null?  Then the .appVersion will be an NPE, which is
>>>> essentially what you're seeing.
>>>>
>>>> On Sun, May 2, 2021 at 11:27 PM 'P5music' via CodenameOne Discussions <
>>>> [email protected]> wrote:
>>>>
>>>>>
>>>>> I compiled my app with maven and generated the iOS Xcode project.
>>>>> When I run it into the iOS simulator (iPad 8th gen) I get this early
>>>>> error:
>>>>> Thread 4: EXC_BAD_ACCESS (code=1, address=0x30)
>>>>> at this instruction
>>>>> return (*(struct
>>>>> obj__com_myapp_app_AppData*)__cn1T).com_myapp_app_AppData_appVersion;
>>>>> Where only the .com_myapp_app_AppData_appVersion part is in red. The
>>>>> iOS build code is below.
>>>>>
>>>>> It happens at
>>>>> ((AppData)appData.get()).appVersion
>>>>> Inside AppJSONData class, that has a weak reference to the AppData
>>>>> instance.
>>>>> That seems to be a CodenameOne internal problem, not of my app,
>>>>> because it does not happen either on the simulator, or on Android, or a
>>>>> real iOS device (32bit).
>>>>> Am I right?
>>>>> What’s happening. How can it be avoided? Should weak references be
>>>>> avoided? I think this one can be removed because it has the same app
>>>>> lifetime, but there are also others that are dynamic.
>>>>> Also it can be something that is wrong in the CN1 maven system to be
>>>>> fixed.
>>>>> Thanks in advance
>>>>>
>>>>> #include "com_myapp_app_AppData.h"
>>>>> #include "com_myapp_app_AppData.h"
>>>>> #include "com_myapp_app_AppJSONData.h"
>>>>> #include "java_io_IOException.h"
>>>>> #include "java_lang_NullPointerException.h"
>>>>> #include "java_lang_String.h"
>>>>> #include "java_lang_ref_WeakReference.h"
>>>>> const struct clazz *base_interfaces_for_com_myapp_app_AppData[] = {};
>>>>> struct clazz class__com_myapp_app_AppData = {
>>>>>   DEBUG_GC_INIT &class__java_lang_Class, 999999, 0, 0, 0, 0,
>>>>> &__FINALIZER_com_myapp_app_AppData ,0 , &__GC_MARK_com_myapp_app_AppData,
>>>>> 0, cn1_class_id_com_myapp_app_AppData, "com.myapp.app.AppData", 0, 0, 0,
>>>>> JAVA_FALSE, &class__java_lang_Object,
>>>>> base_interfaces_for_com_myapp_app_AppData, 0, 0, 0
>>>>> , 0, 0, 0, 0, 0, 0};
>>>>>
>>>>> JAVA_OBJECT get_field_com_myapp_app_AppData_appVersion(JAVA_OBJECT
>>>>> __cn1T) {
>>>>>   return (*(struct
>>>>> obj__com_myapp_app_AppData*)__cn1T).com_myapp_app_AppData_appVersion;
>>>>> }
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "CodenameOne Discussions" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/codenameone-discussions/c0d25bdf-85a4-4253-ade1-fcaed6c484dbn%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/codenameone-discussions/c0d25bdf-85a4-4253-ade1-fcaed6c484dbn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>
>>>>
>>>> --
>>>> Steve Hannah
>>>> Software Developer
>>>> Codename One
>>>> http://www.codenameone.com
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "CodenameOne Discussions" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/codenameone-discussions/0a3f4bbd-c6a1-49e9-90d5-738f88666ea4n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/codenameone-discussions/0a3f4bbd-c6a1-49e9-90d5-738f88666ea4n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> --
>> Steve Hannah
>> Software Developer
>> Codename One
>> http://www.codenameone.com
>>
> --
> You received this message because you are subscribed to the Google Groups
> "CodenameOne Discussions" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/codenameone-discussions/3797eab7-0f25-404d-889a-74a54a996c4dn%40googlegroups.com
> <https://groups.google.com/d/msgid/codenameone-discussions/3797eab7-0f25-404d-889a-74a54a996c4dn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Steve Hannah
Software Developer
Codename One
http://www.codenameone.com

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/CAGOYrKX7O5qq7SsmaxRSLcOsrEaZmuRuot9C2E3jac-eUFPDRQ%40mail.gmail.com.

Reply via email to