Objective-C простой опрос

Я новичок в target-c и создаю приложение, которое требует фонового опроса общего API для обновления некоторых данных в моем пользовательском интерфейсе. После нескольких часов поиска ответа / примера, подходящего для моей проблемы, я наткнулся на некоторые решения, подобные следующим:

длительный опрос в объективе-C

опрос внешнего сервера из приложения при его запуске

Опрос на TCP-сервер каждый час IOS

http://blog.sortedbits.com/async-downloading-of-data/

но, к сожалению, ни один из них не охватывает мой сценарий, который действительно прост: мне нужно начать опрос, когда viewDidLoadскажем, бесконечный цикл, и на каждой итерации, скажем, каждые 10 секунд, чтобы вызывать API, и когда я сделал ReceiveData, я хочу записать эти данные в консоль с NSLogОчевидно, что это не может быть сделано в главном потоке.

Что мне действительно нужно, так это очень простой пример того, как это сделать, и под простым я имею в виду:

  • Я не могу реализовать длинные опросы / push-уведомления по многим причинам и не ищу способ сделать это, давайте просто предположим, что я не могу.
  • Я не хочу полагаться на модные рамки, такие как LRResty, RESTKit, AFNetworking или что-то еще, поскольку они мне действительно не нужны, а также я не могу поверить, что нет бюллетеня SDK, который мог бы охватить этот базовый сценарий.
  • Больше мне ничего не нужно, кроме того, что я описал, так что никакой аутентификации, никаких параметров в моем запросе, никакой обработки ответов и т. Д. (Так как я новичок в target-c, а вещи, которые не нужны строго, могут просто сбить меня с толку...)

Решение, которое я ищу, может быть примерно таким (используя NSOperationQueue для запуска моего цикла в отдельном потоке):

- (void)viewDidLoad {
    [super viewDidLoad];
    //To run polling on a separate thread
    operationQueue = [NSOperationQueue new];
    NSInvocationOperation *operation=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doPolling) object:nil];
    [operationQueue addOperation:operation];
}

-(void)doPolling {
    MyDao *myDao = [MyDao new];
    while (true) {
       [myDao callApi];
       [NSThread sleepForTimeInterval:10];
    }
}

// and in MyDao
-(void)callApi {
    NSMutableString *url= [NSMutableString stringWithFormat:@"%@",@"http:www.example.it"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
    request.HTTPMethod = @"GET";
    self.conn= [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if(self.conn){
        [self.conn start];
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"didReceiveData %s","yes");
}

но, к сожалению, как указано здесь: асинхронное NSURLConnection с NSOperation похоже, что я не могу этого сделать.

Пожалуйста, помогите, я отказываюсь верить, что не существует простого и простого решения для этого базового сценария.

0 ответов

Другие вопросы по тегам