Проверьте возвращаемое значение для вызова NSUserDefaults -synchronize.Вполне возможно, что это не удается.
BOOL result = [user synchronize];
NSLog(@" result = %@", result ? @"YES" : @"NO");
Если синхронизация не дает сбоя, то происходит нечто странное ...