0
NSString *mediaType = info [UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage])
{
    NSURL * URL = [NSURL URLWithString:[BGMakeURL URLForUploadImage]];
    UIImage * image = info[UIImagePickerControllerEditedImage];
    if(!image)
    {
        image= info[UIImagePickerControllerOriginalImage];
    }
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

    parameters [@"__VIEWSTATE"]=@"/wEPDwUKMTQxNzIxMTc0MQ9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkpPnRKFYg9pwczRd4Lr3SFyeNR3bJtDpNqNyMm9qs/4g=";
    parameters [@"__EVENTVALIDATION"]=@"/wEWBgLE38oCAofc/4YFAuv/gd4CApahmrIJAuKeq6sMAu3ehcwDnwyRwRhgxmSADdcUMCfAUEl1cW8dliatCxOiAEYU8Jc=";
    parameters [@"Image"]=[FSNData withImage:image jpegQuality:.9 fileName:@"fileName"];




  FSNConnection *connection =
    [FSNConnection withUrl:URL
                    method:FSNRequestMethodPOST
                   headers:nil
                parameters:parameters
                parseBlock:nil
           completionBlock:^(FSNConnection * connection){
               id whatistheresult=connection.parseResult;
               PO(whatistheresult);
               [BGLoadingView toast:@"Image Uploaded"];
           }
             progressBlock:nil];
    [connection start];

私の知る限り、これは同期ではありません。同期したい場合はどうなりますか?

4

1 に答える 1

1

もちろんですが、正しい方法は、FSNetworkingがコンパイルされているかどうかによって異なりますFSN_QUEUED_CONNECTIONS(GitHubの現在のソースから判断して)。それがそうであったと仮定すると、あなたはこのようなことをするでしょう:

dispatch_semaphore_t sem = dispatch_semaphore_create(0);
FSNConnection *connection =
    [FSNConnection withUrl:URL
                    method:FSNRequestMethodPOST
                   headers:nil
                parameters:parameters
                parseBlock:nil
           completionBlock:^(FSNConnection * connection){
               dispatch_semaphore_signal(sem);
           }
             progressBlock:nil];
[connection start];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); // This will block until completion block is called
dispatch_release(sem);

でコンパイルされていない場合はFSN_QUEUED_CONNECTIONS、次のように実行ループをスピンする必要があります。

FSNConnection *connection =
    [FSNConnection withUrl:URL
                    method:FSNRequestMethodPOST
                   headers:nil
                parameters:parameters
                parseBlock:nil
           completionBlock:nil
             progressBlock:nil];
[connection start];

while (!connection.didComplete)
{
    CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);
}

// Execution won't get here until the connection is complete.
于 2013-02-22T12:18:01.540 に答える