One thing you could try would be to keep a reference to the discovered peripheral as a property on your delegate. That way, the peripheral object won't be garbage-collected prematurely (this is basically a workaround, the crash shouldn't happen).