It is probably a bad idea to pass in alloc().init() into an objc method in the argument directly. objc_util does not retain arguments by default, so what happens is the ObjCInstance is created, a pointer to the class is sent to the objc side of the world, then the object is promptly destroyed in python as it falls out of scope. It sort of depends whether the reference counter gets incremented on the objc side, but basically it is a good idea to separately create a variable and pass it in.
So, just use mydelegate=BrowserDelegate.alloc().init(), and pass that into your other methods.
I could not get your code to crash after fixing this, but I also don't think I have a peer around to trigger the callback. There could be other issuex. If you have pythonista 3, you should install dgelessus's pythonista_startup's enable_fault_handler to tell you where the crash is occuring.
If you get this working, please do report back as others may find this useful.