ошибка "out of scope" при итерации NSMutableArray - PullRequest
3 голосов
/ 18 мая 2010

Почему я получаю ошибку "out of scope" всякий раз, когда пытаюсь получить доступ к переменной "url" в этом цикле?

for(NSString *url in self.winnerImageURLs) {
        [mediaItemString appendFormat:@"{\"type\":\"image\",\"src\":\"%@\",\"href\":\"%@\"},", url, url];
    }

Класс самого элемента в "self.winnerImageURLs" NSMutableArray возвращается как NSCFString, поэтому я не уверен, что здесь за дело.

Любые идеи о том, что я делаю неправильно ???

Спасибо

Ответы [ 2 ]

1 голос
/ 18 мая 2010

Если вы говорите о доступе к переменной url в отладчике, это случается довольно часто. Само по себе это не проблема.

1 голос
/ 18 мая 2010

Короткий ответ: так и должно быть. Более длинный ответ: NSString - это кластер классов.

Класс кластера

Кластер классов - это архитектура который группирует ряд частных, конкретные подклассы под публикой, абстрактный суперкласс. Группировка классы таким образом обеспечивает упрощенный интерфейс для пользователя, который видит только публично видимый архитектура. За кулисами, хотя абстрактный класс вызывает до частного подкласса наиболее подходит для выполнения определенного задания.

Многие распространенные классы Cocoa реализованы в виде кластеров классов, включая NSArray, NSString и NSDictionary.

Вы создаете и взаимодействуете с экземплярами кластера так же, как и с любым другим классом. За кулисами, однако, когда вы создаете экземпляр открытого класса, класс возвращает объект соответствующего подкласса на основе метода создания, который вы вызываете. (Вы не можете и не можете выбрать фактический класс экземпляра.)

NSString пример

NSString *a = @"UTF32.txt";

NSString *b = [NSHomeDirectory() stringByAppendingPathComponent:a];

NSTextStorage *storage = [[NSTextStorage alloc] initWithString:b];

NSString *c = [storage string];

Каждый из a, b и c может быть (а в 10.5 -) экземпляром другого частного подкласса (и фактически в Mac OS X v10.5 каждый -). Хотя каждый из объектов принадлежит к частному подклассу NSString, удобно рассматривать каждый из объектов как экземпляры класса NSString.

О Кластеры классов на сайте Apple для разработчиков: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34

...