UIActivityIndicatorView в UITableViewCell не останавливает вращение - PullRequest
3 голосов
/ 10 декабря 2011

У меня есть подкласс UITableViewCell с именем AccountView, который содержит UIActivityIndicatorView. Каждая ячейка должна содержать учетную запись Twitter. Когда пользователь отправляет сообщение в Twitter, предполагается, что UIActivityIndicatorView начинает вращаться, а затем прекращает анимацию при выполнении обработчика запроса Twitter:

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error){
        if (error != nil) {
            NSLog(@"TWITTER ERROR: %@",error);
        }
        NSLog(@"Posted successfully");
        AccountCell *cell = (AccountCell *)[accountTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[accounts indexOfObject:account] inSection:0]];
        NSLog(@"Cell isSpinning?  :%d",[[cell activity] isAnimating]);
        [[cell activity] stopAnimating];
        NSLog(@"Cell isSpinning?  :%d",[[cell activity] isAnimating]);
    }];

Все это прекрасно работает при публикации короткого сообщения в Twitter, однако, когда TWRequest содержит изображение для загрузки, через несколько секунд сообщение с изображением появляется в Twitter, и я вижу следующее сообщение в консоли:

2011-12-10 00:13:22.085 TwitTest[14954:1a03] Posted Successfully
2011-12-10 00:13:22.086 TwitTest[14954:1a03] Cell isSpinning?  :1
2011-12-10 00:13:22.088 TwitTest[14954:1a03] Cell isSpinning?  :0

Но UIActivityIndicatorView продолжает вращаться бесконечно (или, по крайней мере, с задержкой в ​​несколько секунд), даже если в сообщениях журнала указано иное. Тот факт, что это только нарушает загрузку изображений, заставляет меня поверить, что, возможно, мне следует отправить запрос в фоновом потоке, но я никогда раньше не имел дело с потоками и не мог точно сказать, является ли это проблемой.

И последнее: если я перейду к другому представлению и вернусь, UIActivityIndicatorView будет заморожен - если я уйду и вернусь во второй раз, он исчезнет навсегда.

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Вы можете попробовать добавить строку:

[CATransaction flush];

после отправки сообщения StopAnimating. Это поможет, если проблема в том, что цикл обработки событий происходит недостаточно быстро. Не ясно, что это проблема из того, что вы предоставляете, но стоит попробовать. См. этот вопрос и ответ для справки.

Обновлено . Вам нужно будет добавить #import <QuartzCore/QuartzCore.h> в заголовочный файл и убедиться, что вы добавили платформу QuartzCore, используя опцию Build Phases (Link Binary With Libraries) в Targets.

1 голос
/ 10 декабря 2011

Из документации Apple Developer: «Этот обработчик не гарантированно вызывается в каком-либо конкретном потоке».Возможно, ваш интерфейсный цикл работает и после каждого цикла выполнения учитываются изменения.

Попробуйте выполнить изменения интерфейса в основном потоке.Используйте executeSelectorOnMainThread: withObject:

...