私は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;
}
ただし、配列がrootDictionaryの一部である場合。最善のアプローチは何ですか? 2ポストコマンド?質問の最後のコードスニペットを見てください。私はそれから簡単なアプローチを見ません。 – Chrizzz
buildParamsをそのままの状態にして1つの投稿のみを作成する場合は、子供用の区切り文字(改行など)を選択するだけです。 – justin