NSDictionary 的 NSArray - 当数组中只有一个字典而不是一个对象的数组时返回 NSDictionary

Posted

技术标签:

【中文标题】NSDictionary 的 NSArray - 当数组中只有一个字典而不是一个对象的数组时返回 NSDictionary【英文标题】:NSArray of NSDictionary - Returning NSDictionary when having only one dictionary in array, not Array of one object 【发布时间】: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,为什么调试器将其显示为数组或字典? 【参考方案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。

以上是关于NSDictionary 的 NSArray - 当数组中只有一个字典而不是一个对象的数组时返回 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

NSArray 中的 NSDictionary

来自 plist 文件的 NSArray 或 NSDictionary

带有 NSArray 的 UITableview 包含 NSDictionary 和 NSDictionary 包含另一个 NSDictionary

从 NSArray 过滤 NSDictionary

从 NSDictionary 对象的 NSArray 中,如何获取唯一的 NSArray

将包含 NSArray 的 NSDictionary 转换为 JSON