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 похоже, что я не могу этого сделать.
Пожалуйста, помогите, я отказываюсь верить, что не существует простого и простого решения для этого базового сценария.