#ios #objective-c #cocoa #object #nsarray
#iOS #objective-c #cocoa #объект #nsarray
Вопрос:
Я хотел бы проверить наличие пустого объекта (т. Е. Объекта массива, который не имеет значения) в массиве, который получает свои данные из файла.
Например, если мой массив содержит 12 объектов (все NSString), а объект с индексом 11 не возвращает значение, когда его описание печатается в разделе отладки Xcode. Я хочу проверить, так ли это, и ответить соответствующим образом. Я уже пробовал
if (!([MY_ARRAY objectAtIndex:11] == nil))
{
//Some Stuff
}
else
{
//Some other Stuff
}
что не сработало.
Приветствуется любая помощь.
Комментарии:
1. Какие объекты находятся в массиве? Если кто-то возвращает пустую строку, то это по причине, специфичной для этого типа объекта. Например. если это
NSString
(которые возвращают себя в качестве своего описания), то это может быть просто пустая строка.2. Просто строки, но разве пустая строка не возвращает @»», а не абсолютно ничего?
3. Вы можете проверить длину строки: [длина строки] > 0
4. Определите «пустой». Пустая строка, пустой словарь, пустой массив, пустой набор???
5. @KJA1582 нет, это не так. Объект, возвращаемый
description
и, следовательно, выводимыйNSLog
, является описанием объекта. Это не синтаксис Objective-C, который вам нужно будет ввести для создания объекта. Можете ли вы представить, что что-то вродеNSURLConnection
должно было бы быть предоставлено в качестве описания?
Ответ №1:
Метод описания предназначен для отладки. Вы не должны использовать его в своей программной логике. Что это за объекты и что они содержат? Можете ли вы изменить объекты, чтобы добавить свойство «isEmpty»?
Если вы используете NSNull, вы бы использовали код, подобный этому:
NSArray *array = @{@"String", @(4), [NSNull null], @"Another string");
for (id anObject in array)
{
if (anObject =! [NSNull null]))
{
//Some Stuff
}
else
{
//Some other Stuff
}
}
Ответ №2:
Вы можете проверить длину строки: [string length] > 0
Ответ №3:
объект — это массив, который не может быть равен нулю, но вы можете использовать [NSNull null], который является «объектным эквивалентом» nil
Комментарии:
1. Он по-прежнему выполнял if, а не else после замены nil на [NSNull null]
2. После печати описания указанного объекта в консоли отладки я получаю следующее: Печать описания [11]: <объект вернул пустое описание>
3. Если объект возвращает пустое описание, это просто означает, что он не реализует метод описания. Каков класс объекта, если вы
po
используете объект в консоли илиNSLog
объект в коде?4. Используя NSLog, он просто ничего не печатает, но что такое po?
5. Nvm, разобрался. Это результат: (lldb) po 0x3faa29d0 <объект вернул пустое описание> (lldb)
Ответ №4:
Как утверждает Джером Диаз, объекты в массиве не могут быть равны нулю. Единственный вариант, который у вас есть, — это проверить свойство count массива, если оно отражает ожидаемое значение, или вы можете проверить тип / класс объекта в массиве. Безопасным способом включения пустого объекта в массив является [NSNull null]
, но это задача для метода, который заполняет массив, а не для того, который его считывает.
Вы можете проверить тип класса объекта в массиве с помощью isKindOfClass
или isMemberOfClass
.