我需要对我的iOS应用进行非常简单的背景检查。它只需要对我的Web服务器进行一次调用,并检查它在我的应用程序中检索的数字。有可能做那种背景调查吗?如果是这样我该怎么办呢?
修改
澄清我的背景意思:我的意思是电话背景。当应用程序不存在时。是否可以在后台执行此请求?显然,应用程序没有完全关闭多任务处理。
答案 0 :(得分:1)
对于NSOperationQueue来说,这听起来很完美。
http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues
您可以编写操作,然后在需要时将其放入队列。
或者,更简单地说,你可以做一个非常简单的异步调用。
+ (NSArray *) myGetRequest: (NSURL *) url{
NSArray *json = [[NSArray alloc] init];
NSData* data = [NSData dataWithContentsOfURL:
url];
NSError *error;
if (data)
json = [[NSArray alloc] initWithArray:[NSJSONSerialization
JSONObjectWithData:data
options:kNilOptions
error:&error]];
if (error)
NSLog(@"%@", error)
return json;
}
然后把它放在一个简单的调度块中......
dispatch_queue_t downloadQueueA = dispatch_queue_create("updater", NULL);
dispatch_async(downloadQueueA, ^{
// stuff done here will happen in the background
NSArray * arrayOfData = [self myGetRequest: myURL];
// could be array... dictionary... whatever, you control this by returning the type of data model you want from the server formatted as JSON data
NSString * stringValue = arrayOfData[index];
dispatch_async(dispatch_get_main_queue(), ^{
// perform checking here and do whatever updating you need to do based on the data
});
});
答案 1 :(得分:1)
检查服务器和检索数据的方法很多。
我的建议:
如果您的服务器速度很快且您只需要一个号码,您可以在主要步骤中执行此操作,否则请使用:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// your request here
});
根据要求以不同的方式工作。
请记住检查互联网连接和服务器是否可用,如可达性和使用NSURLRequest委托管理连接错误
答案 2 :(得分:0)
你应该可以使用Grand Central Dispatch:https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html
来做到这一点答案 3 :(得分:0)
在iOS上查看本教程Multithreading and Grand Central Dispatch。