2

我已经发布了问题如何使用 Bolts 框架 [Facebook+Parse]但现在我有一个问题,如果我想使用 Bolts 框架,我必须使用解析网络服务吗?

saveAsync:他们提供了与Parse webservice相关的示例代码,如下所示。但我 "Using these libraries does not require using any Parse services. Nor do they require having a Parse or Facebook developer account"Boltss 的 github中看到了这一行

[[object saveAsync:obj] continueWithBlock:^id(BFTask *task) {
  if (task.isCancelled) {
    // the save was cancelled.
  } else if (task.error) {
    // the save failed.
  } else {
    // the object was saved successfully.
    SaveResult *saveResult = task.result;
  }
  return nil;
}];

现在我很困惑,Is bolts framework need to use parse webservice?

注意:不要问你想在哪里使用 Bolts-framework。看我这个问题的第一行。

4

3 回答 3

1

我知道这个问题被问到已经有一段时间了,但是由于 mani 想知道你是否可以将 Bolts 框架与 AFNetworking 一起使用,我想添加一个显示用法的快速示例。
它写得很快,而且非常简单明了。

func taskWithPath(path: String) -> BFTask {

    let task = BFTaskCompletionSource()
    AFHTTPRequestOperationManager().GET(path, parameters: nil, success: { (operation, response) in
        task.setResult(response)

    }) { (operation, error) -> Void in
        task.setError(error)
    }
    return task.task
}

希望这可以帮助 :)

于 2015-01-16T11:42:33.770 回答
1

当然它不需要 Parse 网络服务。我在实现自己的任务时遇到了同样的困难,我正在研究这个框架。查看BoltsTest 代码:您可以找到一些有用的代码。

我正在一个示例项目(https://github.com/giaesp/BoltsFrameworkSample)中尝试一些实验。基本上你需要定义你自己的方法返回一个BFTask。这里简单摘录。

- (BFTask*) parseHTML:(NSURL*)url searchString:(NSString*)searchString {
BFTaskCompletionSource * tcs = [BFTaskCompletionSource taskCompletionSource];

NSURLRequest * request = [NSURLRequest requestWithURL:url
                                          cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                      timeoutInterval:30];
NSURLResponse * response;
NSError * error;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!error) {
    NSString * receivedData = [NSString stringWithUTF8String:[returnData bytes]];
    NSUInteger occurrences = [self countOccurencesOfString:@"iOS" inputString:receivedData];
    [tcs setResult:[NSNumber numberWithInt:occurrences]];


}
else {
    [tcs setError:error];
}

return tcs.task;
}

然后,您可以按照文档说明使用您的方法并检查任务状态。

[[self parseHTML:[NSURL URLWithString:@"http://www.stackoverflow.com"]] continueWithBlock:^id(BFTask *task) {
if (task.isCancelled) {
    // the task was cancelled
 } else if (task.error) {
    // the task failed
} else {
    // the task completes
}
return nil;
}];
于 2014-02-06T16:31:47.880 回答
0

Bolts 的想法使用BFTask. 您不一定必须将操作包装在方法中,但这是想象您应该如何构建代码的好方法:

- (BFTask*) asynchronousImageProcessOperation;
- (BFTask*) asynchronousNetworkOperation;

...所有这些都将遵循类似的模式:

- (BFTask*) asynchronousNetworkOperation {
  BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource];

  // ... here's the code that does some asynchronous operation on another thread/queue
  [someAsyncTask completeWithBlock:^(id response, NSError *error) {
    error ? [source setError:error] : [source setResult:response];
  }

  return task;
}

它的美妙之处在于您可以将这些任务以某种方式串在一起。例如,如果您需要处理图像然后上传它,您可以这样做:

[[object methodReturnImageProcessingTask] continueWithBlock:^(BFTask *task) {
  [[anotherObject imageUploadTaskForImage:task.result] continueWithBlock:^(BFTask *task) {
    self.label.text = @"Processing and image complete";
  }]
}]

当然,您也可以将该两阶段任务封装在其自己的任务中:

- (BFTask*) processAndUploadImage:(UIImage* image);

在这里凭记忆打字。真正强大的是排序和分组。伟大的框架。

于 2014-02-19T19:21:45.273 回答