2014-07-26 38 views
3

場景 =我有一個應用程序,允許用戶向其他用戶發送消息。我還有一個按鈕,可以顯示用戶擁有的新數量(未讀)消息。金額將顯示在底部標籤欄上的徽章圖標上。解析iOS SDK:如何高效地運行連續查詢

我一直在做什麼 =如果當前用戶發佈新消息,則每5秒查詢一次。

- (void)queryForMessagesBadgeNumber:(NSTimer *)timer 
{ 
    NSString *currentUserID = [PFUser currentUser][@"userID"]; 

    PFQuery *badgeQuery = [PFQuery queryWithClassName:@"Message"]; 
    [badgeQuery whereKey:@"receiverID" equalTo:currentUserID]; 
    [badgeQuery whereKey:@"wasRead" equalTo:[NSNumber numberWithBool:NO]]; 
    [badgeQuery countObjectsInBackgroundWithBlock:^(int number, NSError *error) 
    { 
     if (number == 0) 
     { 
      NSLog(@"No unread messages"); 
     } 
     else 
     { 
      [[self.tabBar.items objectAtIndex:2] setBadgeValue:[NSString stringWithFormat:@"%d",number]]; 
     } 
    }]; 
} 

問題 =這是非常繁重的「請求每秒」計數。解析允許30req /秒的免費增值,只用我的一個電話,我用這個查詢的一半。

問題 =有沒有人知道更有效的方法,我可以實現我在這裏做的事情?

+0

哇,這也將會使你的用戶在手機上使用數據計劃時不高興。爲什麼不讓用戶通過使用「UIRefreshControl」來啓動他們的數據使用呢? – klcjr89

+1

使用推送通知。 – Fosco

+0

你可以用推送通知來解釋你的意思嗎? –

回答

2

使用推送通知。

當用戶將消息發送給其他用戶時,您可以讓應用程序向接收者發送推送通知。您可以選擇是否顯示橫幅,或只更新徽章。

指南就設在這裏 - Parse Push guide

解析推也可以自由到一定量的通知,但比輪詢更好的方式DB秒每x量

+0

我聽了你的話。正因爲如此,我已經打開了一堆我再也看不到的蠕蟲。你能幫我麼?我在這裏發佈了我的問題。 http://stackoverflow.com/questions/25045227/ios-receiving-remote-push-notifications-for-only-certain-view-controllers –