valueForKey: вид сложного метода во всех местах, где он ищет. Я считаю более надежным использовать геттеры для конкретных типов данных при работе со значениями по умолчанию.
if ([defaults boolForKey:kIdentifierKey]) [self doSomething];
Или вы можете использовать objectForKey: который должен возвращать ноль, как вы ожидаете. Фактически, вы делаете это, когда создаете оператор NSLog. И строковое описание nil равно @ "", так что вы получите то, что ожидаете.
Кроме того, здесь вы тестируете и регистрируете различные ключи:
[defaults valueForKey:kIdentifierKey];
[defaults objectForKey:kGroupIdentifierKey];
Убедитесь, что вы тестируете и записываете, что вы думаете.
Тест из нового проекта iPhone:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"foobar"]) NSLog(@"is not yet defined");
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"foobar"]) NSLog(@"is not yet defined");
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"foobar"] == nil) NSLog(@"valueForKey is nil");
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"foobar"] == nil) NSLog(@"objectForKey is nil");
Выводит:
is not yet defined
is not yet defined
valueForKey is nil
objectForKey is nil
Я думаю, у вас здесь что-то еще происходит.