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的主要内容,如果未能解决你的问题,请参考以下文章
来自 plist 文件的 NSArray 或 NSDictionary
带有 NSArray 的 UITableview 包含 NSDictionary 和 NSDictionary 包含另一个 NSDictionary