ios - 我如何添加故障 block Objective-C

标签 ios objective-c

我已经经历了一些Stack Overflow问题,但似乎无法弄清楚如何修改我的代码以包含失败块。如何在此代码中添加故障块?

+ (void)loginUser:(NSString *)username withPassword:(NSString *)password :(void (^)(BOOL finished))completionBlock {
  NSString *endpoint = @"Users/Login";
  [self postEndpoint:endpoint params:[NSMutableDictionary dictionaryWithObjectsAndKeys:username, @"Username", password, @"Password", nil] completionBlock:^(DollarResponse *response) {
      NSLog(@"%@",response);
    if ([response.result isEqual:[NSNull null]]) {
      [self displayError:response.message];
    } else {
      Login *login = [[Login alloc] initWithDictionary:response.result];
      [self saveLogin:login];
      completionBlock(YES);
    }
}];
     /* loginUser:withPassword:: */

最佳答案

首先,您需要通过障碍。为此定义一个类型是有用的:

 typedef void (^MyErrorBlock)(NSString* error);

请注意,您将在该块中将错误作为NSString传递,因为您的response.message看起来像一个字符串。尽管通常错误块会传递NSError

要将其作为参数传递,您可以执行以下操作:
 -(void)loginUser:(NSString *)username 
     withPassword:(NSString *)password 
     (void (^)(BOOL finished)): completionBlock
                  (MyErrorBlock): errorBlock

然后,您可以在调用completionBlock时调用它,但是您可以这样传递response.message:
 errorBlock(response.message)

您还可以保存一个指向errorBlock的指针,然后在需要时调用它。

关于ios - 我如何添加故障 block Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774218/

相关文章:

ios - 如何旋转 iOS 标签并使其贴在屏幕边缘?

ios - 在 FirstVC 中选择单元格后,如何为 SecondVC 中的每个单元格调用按钮操作?

objective-c - 我如何知道我是否需要保留或转让属性(property)?

ios - Swift - UITableViewCell 辅助功能(画外音)

ios - Apple 在核心数据的上下文中将什么称为对象图?

ios - Delphi XE5 iOS TidHTTP.get 获取旧版本的文件。也许缓存

ios - 如何在 iOS 中创建图像 slider ?

ios - 由于 iOS6 上的全局外观属性,MFMailComposeViewController 崩溃

ios - AFNetworking 是在没有完整位码的情况下构建的

Objective-C 属性表达式地址