2012-04-10 64 views
2

我從來沒有用推送通知編寫過應用程序,我有一個非常普遍的問題。 我想刷新一個UITableview的數據(來自web服務)automaticaly沒有「拉刷新」或任何其他用戶的交互。是否可以使用推送通知通知我的應用程序進行數據更改,以避免每隔xx秒輪詢一次,浪費帶寬和電池?在沒有用戶交互的情況下自動刷新UITableview(IOS 5)

換句話說,雖然我的應用程序在前臺運行(也許),我可以處理消息,用戶不會收到一個彈出窗口,但是否則會發生什麼?

有沒有其他辦法可以達到同樣的效果?

我將使用IOS 5.0以上

由於提前

回答

4

你可以做一個服務器的HTTP請求,只有當出現了一個變化返回的東西。那麼如果這個響應不是空的,你可以重新加載數據。您可以通過NSTimer調用的函數。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(get) userInfo:nil repeats:YES]; 

-(void)get { 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/app.php"]]; 
    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    if(![responseString isEqualToString:@""]) { 
    // reload 
    } 
} 
+0

或與'didReceiveLocalNotification'結合(由斯蒂芬達林頓回答上面) – Dion 2012-04-10 12:04:23

+0

謝謝!這有很大幫助。不幸的是我無法投票,因爲我沒有15點聲望點! – vassilag 2012-04-10 12:05:50

+0

你說你想避免輪詢!僅僅因爲身體中沒有數據並不意味着無線電已關閉或沒有數據傳輸。 – 2012-04-10 12:24:17

1

當你的應用程序正在運行,你可以註冊以接收推送通知。然後,這只是實現該方法的一個問題,使其更新您的tableview。

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif { 

這很好documented by Apple

+0

謝謝斯蒂芬。 – vassilag 2012-04-10 12:13:48

相關問題