Objective c NSDictionary是否使用相同的键定义多个值?

Objective c NSDictionary是否使用相同的键定义多个值?,objective-c,nsdictionary,Objective C,Nsdictionary,我正在尝试创建一个NSDictionary,它看起来有重复的键,但值不同 这是因为我正在向它发送数据的web服务—它接受多种形式的post消息,并且需要如下值: SomeKey: value1 SomeKey: value2 SomeKey value 3 SomeKey: value1, value2, value 3... -(void)setupSearchParameters: (NSString *)userId { self.sellerListidStrin

我正在尝试创建一个
NSDictionary
,它看起来有重复的键,但值不同

这是因为我正在向它发送数据的web服务—它接受多种形式的post消息,并且需要如下值:

SomeKey: value1
SomeKey: value2
SomeKey value 3
SomeKey: value1, value2, value 3... 
    -(void)setupSearchParameters: (NSString *)userId
{

    self.sellerListidString = userId;

    [self.parameters setObject:self.sellerListidString forKey:self.typeOfSellerSearch];
}
-(void)fetch:(NSDictionary *)urlParameters
{
    if (!self.webService.isBusy){

        BBWebService *webService = [[BBWebService alloc]initWithURL:self.url RequestType:GET_REQUEST UrlParameters:urlParameters];

        self.webService = webService;
        self.webService.webServiceId = wsID;
        [self.webService setDelegate:self]; 

    }

}
不是这样的:

SomeKey: value1
SomeKey: value2
SomeKey value 3
SomeKey: value1, value2, value 3... 
    -(void)setupSearchParameters: (NSString *)userId
{

    self.sellerListidString = userId;

    [self.parameters setObject:self.sellerListidString forKey:self.typeOfSellerSearch];
}
-(void)fetch:(NSDictionary *)urlParameters
{
    if (!self.webService.isBusy){

        BBWebService *webService = [[BBWebService alloc]initWithURL:self.url RequestType:GET_REQUEST UrlParameters:urlParameters];

        self.webService = webService;
        self.webService.webServiceId = wsID;
        [self.webService setDelegate:self]; 

    }

}
我有一个NSArray中的值-但是我不知道如何将它们放入一个类似于上面的NSDictionary-可能是某种对象

编辑

下面是我如何向主服务器发出web服务请求的

网络库:AFNetworking 2.0

viewControllerA

此代码在发出以前的web服务请求后运行:

NSDictionary *results = [[BBDataStore sharedDataStore]fetchuserIdResult];
            BBSeller *seller = [[BBSeller alloc]init];

            seller.alias = results[@"userAlias"];
            seller.userId = results[@"userid"];

            [self.sellerListIds addObject:seller.userId];
            [self.sellerListAliases addObject:seller];
这会将数据拆分为两个数组:

self.sellerListIds
是我真正感兴趣的用户ID。它只是一个
NSString

self.sellerListAliases
只是在屏幕上向用户显示用户名而已——真的没什么了。我需要将此数据发送到的web服务只查看用户ID

对-然后我调用一个方法

[self setupSearchParameters:seller.userId];
看起来是这样的:

SomeKey: value1
SomeKey: value2
SomeKey value 3
SomeKey: value1, value2, value 3... 
    -(void)setupSearchParameters: (NSString *)userId
{

    self.sellerListidString = userId;

    [self.parameters setObject:self.sellerListidString forKey:self.typeOfSellerSearch];
}
-(void)fetch:(NSDictionary *)urlParameters
{
    if (!self.webService.isBusy){

        BBWebService *webService = [[BBWebService alloc]initWithURL:self.url RequestType:GET_REQUEST UrlParameters:urlParameters];

        self.webService = webService;
        self.webService.webServiceId = wsID;
        [self.webService setDelegate:self]; 

    }

}
这允许一个用户ID作为密钥:
self.typeOfSellerSearch

现在,当用户按下确认按钮执行web服务搜索时,它会调用my data中的一个方法,从self.parameters字典开始,并将其他值添加到现有字典中,其中包括其他搜索关键字

最后,它调用网络请求方法-如下所示:

SomeKey: value1
SomeKey: value2
SomeKey value 3
SomeKey: value1, value2, value 3... 
    -(void)setupSearchParameters: (NSString *)userId
{

    self.sellerListidString = userId;

    [self.parameters setObject:self.sellerListidString forKey:self.typeOfSellerSearch];
}
-(void)fetch:(NSDictionary *)urlParameters
{
    if (!self.webService.isBusy){

        BBWebService *webService = [[BBWebService alloc]initWithURL:self.url RequestType:GET_REQUEST UrlParameters:urlParameters];

        self.webService = webService;
        self.webService.webServiceId = wsID;
        [self.webService setDelegate:self]; 

    }

}
调用此方法的:

    -(instancetype)initWithURL:(NSString *)url RequestType:(NSString *)requestType  UrlParameters:(NSDictionary *)urlParameters
{

    [self getSessionManager];

    if ([requestType isEqualToString:@"GET"]){

        self.isBusy = YES;
        [self.manager GET:url parameters:urlParameters
                  success:^(NSURLSessionDataTask *task, id responseObject){

                      NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;

                      int statusCode = (int)response.statusCode;

                      [self requestDone:responseObject StatusCode:statusCode];

                  }failure:^(NSURLSessionDataTask *task, NSError *error){

                      NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;

                      int statusCode = (int)response.statusCode;
                      [self requestFailed:error StatusCode:statusCode];

                  }];
return self;
}
从这里开始,AFNetworking 2.0负责将参数构造到URL中并发出请求。当它成功返回时,我获取数据并解析它

现在-这是有效的。但是,我需要它处理多个键/值对

如果我尝试@Selvin的代码,web服务将无法正常工作。我与Java开发者交谈过,他们说web服务期望:

键/值1 键/值2 键/值3 .....

它不适用于以下情况:

键/值1、值2、值3//

这似乎也不起作用:

键2/一些随机值->键/值1


因为它不知道key2是什么,所以忽略它

是否可以使NSDictionary位于数组中

例如:

[
{SomeKey:value1},
{SomeKey:value2},
{SomeKey:value3}
]
您正在使用的框架接受NSDictionary格式。您需要编辑框架以满足您的需要

编辑

您需要编辑应用参数的AFNetworking代码。initWithURL方法将urlParameters作为NSDictionary。但根据我的回答,您需要通过NSArray和NSDIctionary元素的集合


为了完成这项工作,需要做的是,在AFNetworking代码中,必须检查和处理urlParameters。如果urlParameters是NSDictionary,则让代码按原样运行。如果是NSArray,则您需要自己执行“应用HTTP参数”。

请提供更多详细信息。接受字典的web服务的接口是什么?当您使用
objectForKey:@“SomeKey”
?特洛伊木马时,您希望得到什么?web服务只需要具有SomeKey值而不是SomeKey值1、value2、,等等——我正在构建一个NSDictionary,其中包含最终web服务调用所需的其他键/值对。这只是AFNetworking的一个GET请求,并得到一个XML反馈。@dreamlax我希望得到一个NSDictionary,它多次使用相同的键,每次使用不同的值。只需按正常方式设置,显然会覆盖最后一个键。也许我可以构建第二个数组并在NSDictionary中使用它?您希望如何为
NSDictionary
中的一个特定键设置多个不同的对象,而不进一步使用
NSDictionary
NSArray
对象作为值?您了解NSDictionary的概念吗?对web服务的最后调用需要是NSDictionary。也许用你的方法我可以这样做,并将结果数组添加到另一个nsdictionary?这非常接近我实际需要的。但是,我并不是静态地创建数组。它是使用不同的web服务创建的。有没有办法用可变数组来实现这一点?@Tander您可以使用NSMutableArray作为paramsArray,并使用addObject方法将字典对象添加到其中。似乎我必须让Java Deb查看他们的web服务。如果将其放入数组中的NSDictionary,则会失败。我认为web服务需要key/vale。。key/vale而不是key1/value,然后在key1 key/valye key/value内部,如果这有意义的话?您可以从您的一端修复它。不用麻烦Java开发人员更改Web服务。你是如何提出邮寄申请的?您使用哪种框架。或者您只是在使用NSURL连接。请粘贴一些代码,说明你是如何提出网络请求的。如果我能把它修好,那就太好了。我将用web服务请求的基本布局更新我的问题