UITableViewCell中的UIActivityIndi​​catorView不会停止旋转

时间:2011-12-10 08:34:16

标签: iphone objective-c ios uitableview uiactivityindicatorview

我有一个名为AccountView的子类UITableViewCell,它包含一个UIActivityIndi​​catorView。每个单元格都应该包含一个Twitter帐户。当用户向Twitter发布消息时,UIActivityIndi​​catorView应该开始旋转,然后在执行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

但是UIActivityIndi​​catorView会无限期地(或者至少延迟几秒钟)继续旋转,即使Log消息另有说明。事实上,这只会随着图片上传而中断,这让我相信我可能会在后台线程上发送请求,但我之前从未处理过线程,并且无法确定是否存在问题。

最后一件事,如果我导航到不同的视图并返回,UIActivityIndi​​catorView会显示为冻结 - 如果我离开并再次返回,那么它就会消失。

2 个答案:

答案 0 :(得分:1)

来自Apple Developer的文档:“不保证在任何特定线程上调用此处理程序。”也许您的接口循环正在运行,并且在每个运行循环后都会考虑修改。

尝试在主线程中执行接口更改。使用performSelectorOnMainThread:withObject:

答案 1 :(得分:1)

您可以尝试添加以下行:

[CATransaction flush];

发送stopAnimating消息后。如果问题是事件循环没有足够快地出现,这将有所帮助。不清楚这是你提供的问题,但值得一试。有关背景信息,请参阅this question and answer

更新您需要在头文件中添加#import <QuartzCore/QuartzCore.h>,并确保使用Targets中的Build Phases(Link Binary With Libraries)选项添加了QuartzCore框架。