UI消失,Parse查询在semaphore_wait_trap处被阻止

时间:2015-10-28 16:30:48

标签: ios objective-c xcode semaphore

在我的应用中,用户有一个时间轴,其中显示来自朋友的帖子,但随机,查询已停止,不再执行,

更确切地说,我之前遇到了一个问题:我的应用程序冻结在psynch_mutexwait,我通过使用:dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ });修复了在后台线程上运行的查询,但更确切地说:

我有2个查询分别每3秒和4秒循环运行,由2个shcheduled NSTimer

组成

新帖子的第一个查询循环(在这种情况下,用户无需手动刷新):

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    PFQuery *query = [PFQuery queryWithClassName:@"Posts"];

    [query whereKey:@"user" notEqualTo:[PFUser currentUser]];
    [query whereKey:@"user" containedIn:self.allFriends];

    [qFriendInfo findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        if (!error) {

           //Used to display results in UICollectionView
            self.AllPosts = [[NSArray alloc] initWithArray:objects];
        }
});

第二个查询是查询用户的状态,例如,如果用户是"在线","离线",或者"断开连接"

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    PFQuery *query = [PFUser query];

    [query whereKey:@"objectId" notEqualTo:[PFUser currentUser].objectId];
    [query whereKey:@"objectId" containedIn:self.allFriendsIds];

    [qFriendInfo findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        if (!error) {

        //Used to display results in UICollectionView
           self.allUsers = [[NSArray alloc] initWithArray:objects];   
        }
});

使用dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ });

正常运行

但是随机,查询被停止(应用程序也没有被冻结......)(我可以通过控制台中的NSLog看到这一点)当我暂停时,在左侧窗口我可以请参阅semaphore_wait_trap

上的后台主题

有没有人知道如何解决这个问题?

0 个答案:

没有答案