Здесь происходит несколько вещей. Прежде всего, вы сохраняете счетчик, прежде чем увеличиваете его. Это означает, что даже если бы происходило сохранение, оно было бы на единицу меньше, чем вы ожидаете.
Фактическая ошибка, которую вы видите, заключается в том, что вы учитываете счет. Если вы посмотрите, вы заметите, что у вас есть следующая строка в viewDidLoad:
NSInteger count = [prefs integerForKey:@"greeting"];
несмотря на то, что напрямую ссылаются на count в startClick :. Я предполагаю, что у вас также есть ивар с именем count и что вы хотите установить ivar, но на самом деле вы устанавливаете локальную переменную. При выделении класса ivar будет установлен в 0 по умолчанию, поэтому он всегда обнуляется. Вы можете исправить это, изменив что-то вроде:
count = [prefs integerForKey: @ "reeting "];
Также возможно, что ваши значения не синхронизируются на диск, если вы зависаете при выходе из приложения, но если вы не видите сбоев в журнале выполнения, это не должно быть проблемой. Вы можете явно синхронизировать значение, если оно важно.
Вы компилируете этот код с включенными предупреждениями? Вы пытаетесь исправить эти предупреждения? Если у вас включены предупреждения, вы должны увидеть что-то вроде "локальное объявление 'count' скрывает переменную экземпляра"