【问题标题】:NSArray of NSDictionary - Returning NSDictionary when having only one dictionary in array, not Array of one objectNSDictionary 的 NSArray - 当数组中只有一个字典而不是一个对象的数组时返回 NSDictionary
【发布时间】:2015-05-12 23:37:14
【问题描述】:

我对 Objective C 比较陌生。我有一个包含 NSDictionary 对象的 NSArray。我正在调用 Web 服务来获取数据。我有一个 PickerView,这是它的 DataSource(我实现了 numberOfRows):

- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
 {
     NSString *proba = self.viewModel.searchResult.someArray[row];
     return nil;
}

这是我的“proba”,数组中有 3 个 NSDictionaries:

这是我的“proba”,数组中只有 1 个 NSDictionary

问题是当我的服务返回 1 个字典时,我需要在 Array 中有 1 个 NSDictionoray 对象。如何解决这个问题?谢谢

编辑: 我的服务数组,这是我的选择器

- (void)SOAPManager:(SOAPManager *)client didSuccesWithoutError:(id)responseObject
{
SearchResult *result = [SearchResult new];
result.myArray = [responseObject allValues];
self.Result = result;
NSLog(@"Loaded successfully: %@", result.retailers);

}

'self.Result' 是用 RACObserver 观察到的,所以我可以在我的 ViewModel 中使用它。

这是 result.Retailers 有 3 个字典:

这有 1 部字典:

是的,当只有一个对象时,它只返回字典

【问题讨论】:

  • 不幸的是,您的问题根本不清楚。选择器代码似乎与您的 proba 数据结构没有任何关系。您是否尝试将服务器响应解析为不同的东西?如果是这样,请提供该代码(用于构建该数组的代码)。
  • 如果proba被声明为一个NSString,你为什么将它显示为一个数组或字典?
  • 只是为了在调试器中看到,我有 NSLog
  • 再一次,如果proba被声明为NSString,为什么调试器将其显示为数组或字典?

标签: ios objective-c arrays dictionary


【解决方案1】:

您的问题不清楚,但是我猜您有一个 Web 服务,如果有多个结果,则返回一个数组,但如果只有一个,则返回结果本身,而您想要的是一个数组后一种情况的一个结果。

您可以通过使用isKindOfClass: 检查您的网络服务返回的值的类别来解决此问题。概括地说,这可能是:

id myWebServiceResult = ...;

if (![myWebServiceResult isKindOfClass:[NSArray class]]) // note the ! - not
{
   // the result is not an array, make it an array of one item
   myWebServiceResult = @[ myWebServiceResult ];
}

HTH

【讨论】:

  • 是的,我从一开始也怀疑这一点,这很可能是正确的答案。但是,这里真正的正确答案是尽可能实际更改 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多