Здесь:
if (connection!=nil) { [connection release]; }
if (data!=nil) { [data release]; }
вы выпускаете данные. Позже вы попытаетесь использовать опубликованные данные, чтобы они вылетали. Попробуйте это:
if (connection!=nil) { [connection release]; connection = nil; }
if (data!=nil) { [data release]; data = nil; }
Таким образом, ваши if
операторы действительно сработают.