Как мне периодически получать информацию с веб-сервера? - PullRequest
1 голос
/ 14 марта 2011

У меня есть xml-файл на веб-сервере, который периодически обновляется. Прямо сейчас мое приложение загружает XML-файл каждые 8 ​​секунд и анализирует его. Вероятно, это худший способ справиться с подобной ситуацией, и иногда он не работает. Как мне это сделать? Есть ли способ отправить пакет, запрашивающий информацию из базы данных, а затем отправить пакет обратно в приложение? Я не знаю с чего начать. Спасибо за помощь.

РЕДАКТИРОВАТЬ: Вот что я делаю прямо сейчас: 1. Приложение сначала загрузит файл XML и сохранит его в каталоге документов. 2. Он проанализирует файл XML и запустится 3-секундный таймер. 3. После завершения таймера он вызывает функцию, которая удаляет файл XML и вызывает новый таймер, установленный на 3 секунды. 4. После истечения этого таймера загрузка начинается заново, и цикл продолжается.

Я думаю, что проблема в том, что, глядя на файл XML в каталоге документа симулятора, заключается в том, что после обновления файла XML и загрузки его приложением я по-прежнему вижу старый файл в каталоге документов, хотя я вижу, что он обновляется на моем веб-сервере. Я также вижу, как приложение удаляет XML-файл и снова показывает его, так что это не проблема.

Ответы [ 3 ]

2 голосов
/ 14 марта 2011

Опрос, которым вы сейчас занимаетесь, вероятно, является одним из самых популярных способов.Кроме того, посмотрите в WebSockets.https://github.com/esad/zimt

0 голосов
/ 14 марта 2011

Следуйте концепции push-уведомлений, это может быть полезно,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];




    NSLog(@"Registering for push notifications...");    
    [[UIApplication sharedApplication] 
     registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeAlert | 
      UIRemoteNotificationTypeBadge | 
      UIRemoteNotificationTypeSound)];


    return YES;
}


- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

    NSString *str = [NSString 
                     stringWithFormat:@"Device Token=%@",deviceToken];
    NSLog(str);

}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 

    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(str);    

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }    

}


0 голосов
/ 14 марта 2011

Один из моих предпочтительных вариантов для этого - использовать apns;хотя вам придется учитывать вероятность того, что, поскольку apns работает по протоколу UDP, нет гарантии, что все полезные данные будут получены на устройстве.Существует также вероятность того, что в процессе разработки он будет работать нормально, но чрезмерная нагрузка на производственный шлюз Apple приведет к бану.В противном случае это простой сервис, поскольку в этом случае он снимает с себя ответственность за таймер на сервере;все, что нужно вашему приложению, это реализовать метод делегата application:didReceiveRemoteNotification:.Одним из положительных моментов этого подхода является то, что для apns push-уведомления запускаются в течение более длительного периода времени;вы можете уведомить о критических изменениях в файле xml.

РЕДАКТИРОВАТЬ: Извините, apns на самом деле использует TCP - однако Apple не гарантирует получение push apn на устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...