#iphone #objective-c
#iPhone #objective-c
Вопрос:
У меня есть NSString, которая заполняется из некоторых данных, возвращаемых через JSON.
Код отлично работает при обычных обстоятельствах, но бывает случай, когда я получаю возврат в формате JSON.
Когда я выполняю проверку, чтобы увидеть, является ли моя NSString == nil или == null, она не проходит тест.
Но тот факт, что NSString содержит сбой моего приложения.
Так имеет ли какое-то особое значение в Objective C? Или я должен просто выполнить сравнение строк и посмотреть, равна ли строка, а не равна нулю, и обработать ее таким образом.
Это меня немного смущает.
Большое спасибо, код
Комментарии:
1. Можете ли вы опубликовать свой соответствующий код? Это может помочь увидеть, что происходит.
Ответ №1:
<null>
это то, что NSNull
возвращает для его -description
метода. Вам также необходимо проверить
myString == [NSNull null]
в этом случае.
Дополнительная информация: IIRC обычный материал Objective-C JSON будет использовать [NSNull null]
for null
s в структуре JSON, чтобы отличать значение от того, которого там просто нет.
Комментарии:
1. 1. Более конкретно, классы коллекций (такие как словари и массивы) не могут содержать объекты nil, поэтому
[NSNull null]
вместо этого используется в качестве заполнителя.2. Как вы думаете, почему речь идет о
NSNull
и коллекции? Ни то, ни другое не упоминалось в сообщении; OP говорит оNSString
и регистрирует объект (строку или нет), которыйnil
печатается(null)
.3. Потому что на самом деле это не NSString!
4. Также я сталкивался с этой проблемой раньше.
5. Конечно, это должна быть NSString, но многие вещи используют
NSNull
в качестве заполнителя для «null, но существует». Кроме того,(null)
и<null>
— это не одно и то же!
Ответ №2:
NSString *
это просто указатель на NSString
объект.
Для проверки наличия нулевого указателя:
NSString *str;
if (str) {
// str points to an object
if ([str length] == 0) {
// string is empty
}
} else
// str points to nothing
}
Если вы хотите проверить наличие пробелов, вы можете обрезать NSString с помощью stringByTrimmingCharactersInSet
.
Комментарии:
1. В общем, не следует проверять наличие nil перед вызовом метода like,
length
потому что[str length]
он вернет 0, еслиstr
равноnil
.2. @Джон Рид: это не имеет смысла. Если вы просто проверите длину, вы в конечном итоге предположите, что у вас есть допустимый, но пустой объект string, который, вероятно, вызовет проблемы позже.
Ответ №3:
Вы могли бы проверить, является ли оно нулевым с помощью.
if ([str isKindOfClass:[NSNull class]]) {
// str is null.
}
Комментарии:
1.Это не так
NSNull
работает. Это даст вам логическое значение false, еслиstr
естьnil
, но это потому, что вы отправляете сообщение наnil
, которое ничего не делает.
Ответ №4:
Я сделал это таким образом:
if([string isKindOfClass:[NSNull class]]) {
NSLog(@"This is JSON null");
} else {
NSLog(@"This is a string, do what you wanna do with it");
}