2013-02-22 102 views
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"][email protected]"/wEPDwUKMTQxNzIxMTc0MQ9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkpPnRKFYg9pwczRd4Lr3SFyeNR3bJtDpNqNyMm9qs/4g="; 
    parameters [@"__EVENTVALIDATION"][email protected]"/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]; 

據我現在這是不同步的。如果我想讓它同步,怎麼樣?有沒有辦法讓FSNConnection保持同步?

回答

1

當然,但正確的方法取決於是否使用FSN_QUEUED_CONNECTIONS編譯FSNetworking(從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. 
相關問題