我有一个名为AccountView的子类UITableViewCell,它包含一个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会无限期地(或者至少延迟几秒钟)继续旋转,即使Log消息另有说明。事实上,这只会随着图片上传而中断,这让我相信我可能会在后台线程上发送请求,但我之前从未处理过线程,并且无法确定是否存在问题。
最后一件事,如果我导航到不同的视图并返回,UIActivityIndicatorView会显示为冻结 - 如果我离开并再次返回,那么它就会消失。
答案 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框架。