Добавьте UIButton после того, как парсер (в отдельном потоке) завершен - PullRequest
0 голосов
/ 30 июня 2010

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

Я не хочу использовать таймер или оператор while ... поэтому мой вопрос

Парсер готов Что вы предлагаете мне сделать, чтобы добавить кнопку в представление?Я не хочу, чтобы это было добавлено раньше, потому что пользователь попадет в пустую таблицу.Я также не хочу, чтобы перезагрузить таблицу, когда это сделано, потому что представляет другие проблемы для меня.

executeSelector в основном потоке, похоже, не работает для меня ..?Я немного потерян здесь ...

Есть предложения?


Здесь я начинаю другой поток, чтобы запустить парсер (в AppDelegate)

// begin background downloads
[NSThread detachNewThreadSelector:@selector(parseNewData) toTarget:self withObject:nil];

Моя функция parseNewData (в AppDelegate)

-(void)parseNewData {

    //start network activity spinner and release controller when done
    RootViewController * root = [[RootViewController alloc] init];
    [root downloadIcon];
    [root release];

    //create pool to avoid memory leak
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];


    // get the XML path and start parsing
    NSURL *pathURL = [NSURL URLWithString:@"http://www.mysite.com/file.xml"];
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:pathURL];
    [parser setDelegate:self];
    [parser parse];

    //drain pool 
    [pool drain];
    [pool release];

}

Парсер завершил (в AppDelegate)

- (void)parserDidEndDocument:(NSXMLParser *)parser
{

    // parser is finished, we can now kill the network activity icon on root view controller
    RootViewController * root = [[RootViewController alloc] init];
    [root killDownloadIcon];
    [root performSelectorOnMainThread:@selector(unhideShowtimesButton) withObject:nil waitUntilDone:NO];
    [root release];

}

Моя кнопка unhideShowtimesBonton on (в RootViewController)

-(void)unhideShowtimesButton {
    showtimesButton.hidden = FALSE;
}

IЯ делаю это для моего unhideShowtimesButton (проверяется точкой останова), но он просто полностью игнорирует скрытое = False.

1 Ответ

2 голосов
/ 30 июня 2010

Вы создаете новый экземпляр RootViewController в каждой из функций. Это выглядит неправильно. Вы должны использовать только один экземпляр во всем коде. Мне кажется, что экземпляры RootViewController отличаются, экземпляр showTimesButton, который вы пытаетесь скрыть, отличается от того, который отображается.

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