Определен ли NSDictionary?

#objective-c #nsdictionary #alloc

#objective-c #nsdictionary #выделить

Вопрос:

У меня есть NSDictionary, который, возможно, устанавливается внутри цикла. В конце цикла я хочу выяснить, был ли определен словарь. Вот пример:

 NSDictionary *myDict;

for (int i=0; i < 100; i  ){
    if (thisCondition){
        myDict = [NSDictionary dictionaryWithObjectsAndKeys:etc, nil];
    }
}

if (myDict) {
     [self doSomething];
}
  

К сожалению, проверка myDict проходит каждый раз, независимо от того, выделен myDict или нет. Попытка передать какие-либо методы в myDict, например [myDict count], выдает exc_bad_access, потому что он не был выделен. Так что это своего рода ничейная земля.

Есть ли способ добиться этого? Я понимаю, что мог бы переключиться на NSMutableDictionary, определить его, добавить к нему в цикле и проверить количество, но это не мое предпочтение.

Ответ №1:

Сначала убедитесь, что вы инициализируете свой указатель на nil:

 NSDictionary *myDict = nil;
  

в противном случае ваша проверка на наличие действительного указателя может не сработать.

Комментарии:

1. @Jakob Borg Почему не может ? В 1 из 2 ^ 64 случаев это будет работать.

2. вы должны добавить ‘break’ внутри вашего предложения if — чтобы вам не приходилось выполнять остальные обращения

3. @Nikolai Да… Ну, показатель успеха .000000000000000005% эмпирически ближе к «завершится неудачей», чем «может завершиться неудачей».