所以,我正在尝试创建一个小项目,告诉用户他有多少粉丝。
目前我正在使用Instagram Kit,它使用异步块。
我的目标是让程序在后台获取时更新它的数据,并将图标旁边的徽章值更改为关注者数量。我在后台获取方面遇到了一些麻烦,导致获取Instagram信息的块在获取后完成,因此没有数据被检索。
我读到了信号量并决定使用它们。在我向后台提取中调用的方法添加了一些代码后,它执行以下操作:
fetch开始(我得到“我们开始”NSLog),然后主线程被信号量冻结。它应该通过块的“withSuccess”/“failure”部分的完整性来恢复。然而它变得糟透了。没有别的事情发生。我很困惑。
我该怎么办?
(以下是在获取期间调用的方法,我在本地存储instagram令牌,因此无需每次都请求它)
-(IBAction) backgroundActions {
NSLog(@"We begin");
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[[InstagramEngine sharedEngine] getSelfUserDetailsWithSuccess:^(InstagramUser *user) {
NSLog(@"%d",user.followedByCount);
[UIApplication sharedApplication].applicationIconBadgeNumber = user.followedByCount;
[[UIApplication sharedApplication] cancelAllLocalNotifications];
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
NSDate *now = [NSDate date];
localNotification.fireDate = now;
localNotification.alertBody = [NSString stringWithFormat:@"You have %d followers.", user.followedByCount];
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.applicationIconBadgeNumber = user.followedByCount;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
dispatch_semaphore_signal(sem);
} failure:^(NSError *error) {
dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
}
答案 0 :(得分:0)
您所做的是使异步getSelfUserDetailsWithSuccess
变得同步。这就是你的主线程冻结的原因。
否则代码看起来很好。删除信号量并让更新异步发生有什么问题?