0

我需要为我的 iOS 应用程序执行一个非常简单的背景检查。它只需要对我的网络服务器进行一次调用,并根据我的应用程序中的某些内容检查它检索到的号码。这种背景调查可以做吗?如果是这样,我该怎么做才能把它放在一起?

编辑

澄清我所说的背景是什么意思:我是指电话上的背景。当应用程序不存在时。是否可以在后台执行此请求?显然,该应用程序并未完全脱离多任务处理。

4

4 回答 4

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

    });
});
于 2013-09-12T23:01:11.577 回答
1

有很多方法可以检查您的服务器和检索数据。

这是我的建议:

  1. 在服务器上创建包含您的数据的文件(例如 Data.txt)
  2. 使用 NSURLRequest 创建对 Data.txt 的请求
  3. 使用 connectionDidFinishLoading 从 Data.txt 中获取数据
  4. 将 Data.txt 中的数据放入 NSArray
  5. 工作/比较数组并执行您的逻辑

如果您的服务器速度很快并且您只需要获得一个号码,您可以在主线程中执行此操作,否则使用:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
      // your request here  
});

根据要求在不同的胎面工作。

并记得检查互联网连接和您的服务器是否可用,例如 Reachability 并使用 NSURLRequest 委托管理连接错误

于 2013-09-12T23:10:55.087 回答
0

您应该可以使用 Grand Central Dispatch 做到这一点:https ://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

于 2013-09-12T22:57:01.660 回答
0

看看这个 iOS 上的多线程和 Grand Central Dispatch 教程。

http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial

于 2013-09-12T23:05:03.173 回答