0

私は検索しましたが、これはここですでに見つかりません:

NSDataオブジェクトをWebサービスに送信しようとしています。NSDataオブジェクトは、iOS5に組み込まれているJSONを使用するJSONオブジェクトです。

非同期送信を実行してから、サーバーからの応答を確認する必要があります。

サードパーティのライブラリは使いたくありません。

これが私がすでに持っているもので、機能しません:

NSDictionary * initialLogAsJSON = [NSDictionary dictionaryWithObjects:items forKeys:keys];

NSError * error;

NSData * jsonData = [NSJSONSerialization dataWithJSONObject:initialLogAsJSON options:NSJSONWritingPrettyPrinted error:&error];

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:kURLSendTestStartedDataToTenOneServer ]];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"appliction/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: jsonData];

[NSURLConnection sendAsynchronousRequest:request
                                   queue:self.queue
                       completionHandler:^( NSURLResponse * response, NSData * data, NSError * error )
                                        {
                                            NSLog( @"If finished with reponse = %@\nData: %@\nError %@", response, data, error );
                                            // do something useful
                                        }
];
4

2 に答える 2

2

2つの問題:

1)何もゼロでないことがわかるように、その呼び出しですべてのオブジェクトをアサートまたはログに記録する必要があります。

2)ここにタイプミスがあります:

[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"appliction/json" forHTTPHeaderField:@"Content-Type"];

2番目のアプリケーションに「a」がありません

于 2012-08-17T23:28:34.227 に答える
1

実際、問題はそれよりも簡単でした。

ソース文字列にいくつかの面白いエスケープ文字があるため、URLがnilであることが原因でした。

これが私の最終的な(動作中の)実装です:

NSDictionary * mainJSON = [NSDictionary dictionaryWithObjects:mainItems forKeys:mainKeys];

NSError * error;

NSData * jsonData = [NSJSONSerialization dataWithJSONObject:mainJSON options:NSJSONWritingPrettyPrinted error:&error];

NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSASCIIStringEncoding];

NSString * serverString = [NSString stringWithFormat:@"%@", kURLServer];

NSString * urlString = [NSString stringWithFormat:@"%@%@", serverString, jsonString];

NSString * webStringURL = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL * url = [NSURL URLWithString:webStringURL];

NSAssert( url != nil, @"URL nil - Check string values for URL to Server!" );

dispatch_async( kBackgroundQueue, ^
                                   {
                                       NSData * data = [NSData dataWithContentsOfURL:url];
                                                   [self performSelectorOnMainThread:@selector( receivedResponseFromServer: )
                                                                          withObject:data
                                                                       waitUntilDone:YES];
                                   }
               );
于 2012-08-17T23:38:40.433 に答える