【问题标题】:Signalling an error from a method that returns an NSArray从返回 NSArray 的方法发出错误信号
【发布时间】:2023-03-22 02:09:01
【问题描述】:

我有一点架构问题。我有一个方法可以根据来自服务器的数据返回一个数组。

NSArray *myStuff = [anObject getMyStuff];

很明显,服务器可能会出现故障。解决这个问题的最佳方法是什么?我正在研究performFetch: 的工作原理,但它有一个BOOL 作为返回类型。我可以:

NSArray *myStuff = [anObject getMyStuff:&anError];

【问题讨论】:

  • 将方法命名为retrieveMyStuff:等; get 是保留前缀。是的,返回 nil 表示错误并填写错误参数就可以了(请注意,您应该处理 anError 可能为 NULL 的事实,这表明调用者根本对错误不感兴趣)。

标签: objective-c cocoa-touch error-handling


【解决方案1】:

简短的回答是:由你决定

某些 Cocoa 类确实使用了您描述的简单的指向错误的对象。如果您从服务器加载数据,您可能需要查看一个更复杂的请求/响应系统来处理asynchronous 数据。

或者,如果您正在寻找一个非常简单的解决方案,只需在请求失败时返回nil

【讨论】:

    【解决方案2】:

    正如 e.James 之前建议的那样,您应该进行适当的异步处理,其中执行提取的对象将调用一个方法,如果它成功或另一个,如果它失败。
    这有一个变种,在流行的AFNetworking 中使用:将两个块传递给方法,一个用于失败案例,一个用于成功案例

    这可能看起来像这样:

    [client shopsFeedForUserWithID:2 
                           success:^(id response) {
                               blockSelf.shops = [Shop shopsFromReponseDict:response];
                               [blockSelf.tableView reloadData];
                          } failure:^(NSError *error) {
                               //handle the error
                          }]; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      相关资源
      最近更新 更多