iOS Question B4i issues - B4Xtables, ButtonBar

Kevin Hartin

Active Member
Licensed User
Longtime User
I have a working app in B4a and I am in the process of porting it to B4i.

The app is quite straightforward, with plenty of interaction with an API using HttpJob and then populating a B4Xtable. No issue in B4a, but B4i is throwing up some inconsistencies and errors.

One page (PayLinks) happily gets it's dataset through the API call, displays it in the log and runs through the procedure to add it to the B4Xtable, but the table doesn't show. I also found that I had to initialise the B4Xtable in B4i, but not in B4a.

Another page (Transactions) crashes, despite using near identical code. It seems to be B4Xtable related but this is happening in the middle of the WaitFor HttpJob procedure, as I see the URL in the log and then the following error;
Error:
https://samoapayments.com/api/transactions/1000001
Error occurred on line: 120 (B4XTable)
Object was not initialized (UIView)
Stack Trace: (
  CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 809328
  libobjc.A.dylib      objc_exception_throw + 88
  CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 1371660
  SP Client            -[B4IObjectWrapper object] + 76
  SP Client            -[B4XViewWrapper asPanelWrapper] + 52
  SP Client            -[B4XViewWrapper LoadLayout::] + 56
  SP Client            -[ResumableSub_b4xtable_DesignerCreateView resume::] + 2964
  CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 284356
  CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 283984
  SP Client            +[B4I runDynamicMethod:method:throwErrorIfMissing:args:] + 776
 SP Client            -[B4IShell runMethod:] + 320
 SP Client            -[B4IShell raiseEventImpl:method:args::] + 932
 SP Client            -[B4IShellBI raiseEvent:event:params:] + 1008
 SP Client            -[B4IDelegatableResumableSub resume::] + 300
 libdispatch.dylib    904D48A3-D99E-3962-BFA9-C3DFB66BBA83 + 6876
 libdispatch.dylib    904D48A3-D99E-3962-BFA9-C3DFB66BBA83 + 112636
 libdispatch.dylib    904D48A3-D99E-3962-BFA9-C3DFB66BBA83 + 232208
 libdispatch.dylib    904D48A3-D99E-3962-BFA9-C3DFB66BBA83 + 69320
 libdispatch.dylib    _dispatch_main_queue_callback_4CF + 44
 CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 434868
 CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 121660
 CoreFoundation       2F32D384-4637-3018-843E-4FC875B865C4 + 117356
 GraphicsServices     GSEventRunModal + 120
 UIKitCore            C768F963-A0CC-3F5C-A1D3-2E06D53A2381 + 646648
 UIKitCore            UIApplicationMain + 336
 SP Client            main + 100
 dyld                 8ACDB580-8AB7-38C0-A586-E667ADB1C11C + 20008
)

Another inconsistency issue is when trying to add a couple of TopRightButtons. I managed to get them to show, but couldn't get them to trigger anything, so I tried a few alternate methods, but they wouldn't even show. I went back to the code that showed the buttons, two in a little white sausage, but they now dont show and instead I have a big white empty sausage that crashes when touched.

And finally, I've disabled the Firebase Notifications by commenting out the analytics.Initialize as it complains it can't find the GoogleService-Info.plist Where should this reside?

Any help will be much appreciated.

Kev
 
Last edited:

Erel

B4X founder
Staff member
Licensed User
Longtime User
Initialize as it complains it can't find the GoogleService-Info.plist Where should this reside?
Inside <project>\Files\Special

About the B4XTable - when you load a layout with B4XTable, the table isn't immediately ready. Internally there is a call to Sleep(0) and then the table loads its own layout.
It looks like something is broken at this step. Maybe you already modified the table in some way.
You can add Sleep(0) in your code to let the table asynchronously load itself.

About BarButtons - check this example: https://www.b4x.com/android/forum/t...k-for-managing-multiple-pages.118901/#content
 
Upvote 0

Kevin Hartin

Active Member
Licensed User
Longtime User
Inside <project>\Files\Special

About the B4XTable - when you load a layout with B4XTable, the table isn't immediately ready. Internally there is a call to Sleep(0) and then the table loads its own layout.
It looks like something is broken at this step. Maybe you already modified the table in some way.
You can add Sleep(0) in your code to let the table asynchronously load itself.

About BarButtons - check this example: https://www.b4x.com/android/forum/t...k-for-managing-multiple-pages.118901/#content
At what stage would I put a Sleep(0)?
 
Upvote 0
Top