Это всего лишь предположение, так как здесь не весь код.В вашем методе init для класса Transaction вы сохраняете строки?(категория и описание).
Для меня выделяется то, что вы инициализируете транзакцию, а затем сразу после нее освобождаете categoryString.Если вы не сохраняете строку, то это может быть причиной вашего сбоя.
Кстати, вы теряете память.Здесь:
NSString *descriptionString = [[NSString alloc] init];
descriptionString = descriptionField.text;
descriptionString указывает на вновь выделяемую строку, только для переназначения на существующую строку, поэтому первая строка пропускается.Вы должны изменить это на:
NSString *descriptionString;
descriptionString = descriptionField.text;
или более просто:
NSString *descriptionString = descriptionField.text;