UIView drawRect; переменные класса вне области видимости - PullRequest
1 голос
/ 26 апреля 2010

Короткая и приятная версия моего последнего вопроса в свете новой информации.

У меня есть UIVIew с init и методом drawrect (и другим потоком и кучей других вещей, но я буду коротким и приятным).

Все переменные класса, которые я выделяю и инициализирую в методе инициализации - (id), находятся вне области действия / nil / 0x0 в методе drawRect, и я не могу получить к ним доступ.

Например;

В интерфейсе:

NSObject* fred;

В реализации:

-(id)init
{
    if(self == [super init])
    {
        fred = [[NSObject alloc] init];
    }

    return self;
}

-(void)drawRect:(CGRect)rect
{
    NSLog(@"Fred is retained %i times",[fred retainCount]); //FAIL
    NSLog(@"But his variable is actually just pointing at uninitialised 0x0, so you're not reading this in the debugger because the application has crashed before it got here."
}

Следует добавить, что init IS вызывается также перед drawRect. У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 26 апреля 2010

ЕСТЬ это? Вы на самом деле положили туда NSLog и отметили 1005 *? Потому что я думаю, что он инициализирован с initWithFrame: или чем-то подобным.

Редактировать: Некоторое краткое тестирование показывает, что проблема не в том, что Фред не инициализирован; если это было; вы не получите никакой ошибки, так как отправка сообщений на nil не приведет к сбою. (Переменные экземпляра инициализируются в nil). На самом деле происходит то, что где-то по линии fred высвобождается; заставляя указатель указывать на мусор, а не на объект. (Вернее, искаженный или надетый объект, который больше не может получать сообщения.)

Введенного вами кода недостаточно, чтобы найти ошибку; вам нужно будет вставить больше (и точный код, используемый в вашем приложении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...