Как я могу проверить наличие пустого объекта в NSArray

#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 .