2015-05-12 51 views
0

我对Objective C比较新。我有一个包含NSDictionary对象的NSArray。我正在调用Web服务来获取数据。我有一个PickerView这就是它的数据源(我已经numberOfRows实施):NSArray的NSArray - 在数组中只有一个字典时返回NSDictionary,而不是一个对象的数组

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

这是我的 'PROBA' 与3个NSDictionaries在阵:

enter image description here

这是我的 'PROBA'只有1的NSDictionary在阵列

enter image description here

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

编辑: 我从服务阵列,这是我的选择

- (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点字典:

enter image description here

这与1个词典:

enter image description here

所以,是的,只有当oneObject,它只返回字典

+0

你的问题不明确,在所有不幸。 picker代码似乎与您的proba数据结构没有任何关系。你是否试图将服务器响应解析为不同的东西?如果是这样,请提供该代码(用于构建该数组的代码)。 – Dima

+0

如果'proba'被声明为NSString,为什么要显示它是一个数组还是字典? –

+0

只是在调试器中看到......我有NSLog – Flipper

回答

2

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

您可以通过使用isKindOfClass:检查Web服务返回的值的类来解决此问题。在大纲,这可能是:

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

+0

是的,我从一开始就怀疑这一点,它很可能是正确的答案。但是,这里的真实*正确答案应该是在可能的情况下实际更改API。 – Dima

相关问题