#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% эмпирически ближе к «завершится неудачей», чем «может завершиться неудачей».