2012-11-08 3 views
0

사용자에게 여러 가지 메시지를 표시하는 앱이 있습니다. 나는 사용자가 메시지를 읽었다는 것을 서버에 알릴 필요가있다. 는 HTTP 스펙은 가능성이 API는이에 사용하는 키를 복제 허용동일한 키가있는 HTTP POST 요청에 NSDictionary 사용

ID: 1234 
ID: 5678 
ID: 90AB 

참고 :이 작업을 수행하려면, 내가 좋아하는, 읽은 상태로 표시 할 메시지의 ID가 /api/mark_as_read/에 HTTP POST 요청을 보낼 필요 케이스.

현재 AFHTTP 클라이언트 (AFNetworking 라이브러리의 일부)를 사용 중입니다. POST 매개 변수는 NSDictionary로 AFHTTPClient에 전달됩니다. NSDictionary에는 물론 고유 키가 있으므로 "ID"라는 한 값만 전달할 수 있습니다.

솔루션에 대해 잠시 동안 검색 한 결과 아무 것도 발굴하지 못했습니다. 그러나 많은 사람들이 이전에이 문제에 직면했을 것이라고 확신합니다. Objective-C에서 HTTP 클라이언트에 고유하지 않은 키가있는 사전을 전달하려면 어떻게합니까?

업데이트 - AFNetworking 라이브러리를 업데이트하고 하나의 NSDictionary 값에 ID 배열을 넣어서 문제를 해결할 수있었습니다. (아래를 참조하십시오.)

+0

사용해야은 API를 변경할 수 있습니다 쉼표로 구분 된 문자열을 처리합니까? 그래서 1234,5678,90AB ....와 같은 ID 문자열을 보낼 수 있습니다. – Kassem

+0

서비스에 전달 된 데이터는 사전이어야합니까? JSON을 사용하여 키 값 쌍을 보낼 수 있습니까? – propstm

+0

@Kassem API를 변경할 수 없거나 그렇게 할 수 있습니다. –

답변

2

값에 대한 배열을 전달하십시오 :

NSArray *values = [NSArray arrayWithObjects:@"1234", @"5678", @"90AB", nil]; 
NSDictionary *params = [NSDictionary dictionaryWithObjectAndKey:values, @"ID"]; 
+0

그건 작동하지 않습니다, 그냥 단 하나의 ID 필드로'[값 설명]'의 출력을 보냅니다. –

+1

@Aaron 그렇다면 AFNetworking의 오래된 버전을 사용하고 있거나 AFHTTPClient에서 매개 변수 serialization을 실제로 사용하고 있지 않습니다. – mattt

+0

@mattt AFNetworking을 업데이트했으며 이제는 더 가깝습니다. 내 HTTP POST 본문은 이제 id '] = 795918 % 3A2122194149 & id [] = 795919 % 3A2122919993 & id [] = 795919 % 3A2122919702 & id [] = 795919 % 3A2122919678 & id [] = 795919 % 3A2122919765 & id [] = 795919 % 3A2122919762'와 유사합니다. AFHTTPClient의'AFQueryStringPairsFromKeyAndValue' 메쏘드에'[]'문자가 추가 된 것을 볼 수 있습니다. []가 HTTP 사양의 일부입니까? 이 API를 사용하기 위해 제거하면 문제가되지 않습니까? –

0

사전에 설정되고 키가 '정의' 이 표준 딕셔너리와 함께 할 수있는 방법에 의해 고유

하지만 하나는 set을 상속 받아 keys 배열과 dups 배열을 사용할 수 있습니다. afnetwork는이를 사전으로 사용하고 원하는 출력을 제공합니다.

그들은 이러한 클래스가있을 수 있습니다 또는 당신은 쉽게 좀 비슷한 일을 쓸 수 http://cocoaheads.byu.edu/code/CHDataStructures

**이 비효율적이며,이 목적 **

+0

이국적인 데이터 구조는이 특정 상황에서 빨간색 청어입니다. 키를 배열 배열로 설정하는 것보다 더 복잡 할 필요는 없습니다. – mattt

관련 문제