【问题标题】:Is Bolts framework[Parse+Facebook] need to use parse webservice?Bolts 框架[Parse+Facebook] 是否需要使用 parse webservice?
【发布时间】:2014-02-06 09:46:37
【问题描述】:

我已经发布了问题How to use Bolts Framework[Facebook+Parse],但现在我有一个问题,如果我想使用 Bolts 框架,我必须使用 parse webservice 吗?

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

[[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。看我这个问题的第一行。

【问题讨论】:

  • 不,您可以仅使用 Parse SDK 使用 Parse。不需要额外的框架。
  • 朋友,请先完整阅读我的问题。然后问问题。我想在没有解析框架的帮助下使用螺栓框架。这需要使用解析框架吗?
  • 我的朋友,首先阅读 Bolts 的文档:“使用这些库不需要使用任何 Parse 服务。也不需要拥有 Parse 或 Facebook 开发者帐户。” github.com/BoltsFramework/Bolts-iOS
  • 我知道这一点。这就是为什么我建议你阅读我上面的问题。您作为命令发布的内容。我已经在我的问题中添加了。我已经把那个文件完整了..
  • @rist 请提出一些方法来澄清我的问题

标签: ios parse-platform bolts-framework


【解决方案1】:

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

我正在一个示例项目 (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;
}];

【讨论】:

  • 如果你能给出一个有用代码的例子而不是仅仅链接到它将会很有帮助。
  • 是否可以将此框架与用于 ASHTTP 或 AFNetworking 等 Web 服务的第三方框架一起使用?我的想法就像你发布的那样。但是我已经用 AFNetwork 编写了 web 服务。是否可以将螺栓与它集成在一起?或者这个框架必须用于其他用途?
  • 您的示例代码非常有用。但我认为,这里缺少一些东西。我看不到您在上面编写的与异步操作无关的代码。你能解释一下你的异步操作代码吗?无论如何+1给你?我认为,这是启动 bolts-framework 的起点。
  • 迟到了这个帖子,感谢 Mani 的坚持。我对 Bolts 也很陌生,示例并没有完全深入。似乎这里的 BFTask 只是在异步调用之后设置,这使得在回调时设置 bool 没有什么不同。我认为许多新手都期望该任务包含异步任务。例如,考虑到 BFTaskCompletionSource 有一个取消方法,它还能如何帮助实际取消异步调用?
【解决方案2】:

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

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
}

希望这会有所帮助:)

【讨论】:

    【解决方案3】:

    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);
    

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

    【讨论】:

    • 感谢 itsthejb。您在上面尝试过的是在异步任务完成后而不是在异步任务期间使用 BFTask 处理?我对吗?我想知道,BFTask如何与Asynchronous task一起使用,尤其是BFTask在哪里锁定和解锁资源?
    • 例如:假设您要从 AssertLibrary 加载所有图像,并在加载时将所有图像调整为标准尺寸,因此如果使用主线程会触发。在这个地方,如果你使用异步操作的方式,如何使用 BFTask 呢?另一个前任。有一次,你试图用异步操作并行调用 10 个 web 服务,你怎么能将 GCD 与 BFTask 一起使用?
    猜你喜欢
    • 2014-02-26
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多