2011-12-02 5 views
0

私は1対5の関係を持つコアデータオブジェクトを持っています。だから、インスタンスNSRequestのHTTPRequestと1つのNSSetを値として返す

person.mothername 
person.fathername 
person.childrennames <- this is a NSSet 

のために今、私は1つのHTTPリクエストを通じてiPhoneから当社のサーバーに一度にこれを投稿したいです。これはできますか?

IはNSSetないプレーン例えば今使用コード:パラメータの設定 :

params = [NSDictionary dictionaryWithObjectsAndKeys: 
       self.person.mothername, @"mothername", 
       self.person.fathername, @"fathername", 
       nil]; 
self.httpRequest = [[HTTPRequest alloc] init]; 
self.httpRequest.delegate = self; 
[self.httpRequest httpPOST:SERVER_POST_PERSON withParams:params]; 

次のステップ(=直接的):

- (BOOL)httpPOST:(NSString *)url withParams:(NSDictionary *)params { 

const char *strUrlConst = (const char*)[[self buildParams:params] UTF8String]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; 

[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:[NSData dataWithBytes:strUrlConst length:strlen(strUrlConst)]]; 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
if (connection) { 
    self.responseData = [[NSMutableData data] retain]; 
    return YES; 
} 

return NO; 

}

その後、最終的な方法(簡単ですか?):

- (NSString *)buildParams:(NSDictionary *)params { 
NSString *builtParams = [[[NSString alloc] init] autorelease]; 

int i = 0; 
for (NSString *key in [params allKeys]) { 
    NSString *value = [self escapeString:[params objectForKey:key]]; 
    if (!value) { 
     continue; 
    } 
    if (!i++) { 
     builtParams = [builtParams stringByAppendingString:[NSString stringWithFormat:@"%@=%@", key, value]]; 
    } else { 
     builtParams = [builtParams stringByAppendingString:[NSString stringWithFormat:@"&%@=%@", key, value]]; 
    } 
} 

NSLog(@"PARAMS: %@", builtParams); 
return builtParams; 

}

答えて

0

NSSet-allObjects+setWithArray:を使用してNSArrayに変換して戻すことができます。

+0

ただし、配列がrootDictionaryの一部である場合。最善のアプローチは何ですか? 2ポストコマンド?質問の最後のコードスニペットを見てください。私はそれから簡単なアプローチを見ません。 – Chrizzz

+0

buildParamsをそのままの状態にして1つの投稿のみを作成する場合は、子供用の区切り文字(改行など)を選択するだけです。 – justin

0

なぜJSONを使わないのでしょうか?
SBJsonのようなライブラリは、1行のコード(IIRC:[params JSONRepresentation])でNSDictionaryからJSON文字列を作成できます。 NSStringの%esacpesメソッドを使用してURLエンコードするのは簡単です。
サーバー側には、データを解析するために選択するJSONライブラリがたくさんあるはずです。

関連する問題