2017-07-31 45 views
0

我必須在我的項目中使用自定義的多圖像選擇第三方文件夾來選擇圖像,並且這些圖像以數組形式出現。的鏈接,自定義圖像選擇這個CreolePhotoSelection.將圖像陣列上傳到IOS中的服務器

現在我想要上傳圖片到服務的陣列,但它給我這個錯誤:

-[__NSDictionaryM CGImage]: unrecognized selector sent to instance 0x60800024dce0 2017-07-31 12:41:46.777 PK.House[7795:1224040] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryM CGImage]: unrecognized selector sent to instance 0x60800024dce0'

我的代碼上傳圖片是,

-(void)submit 
    { 

     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"yyyyMMddHHmmss"]; 
     NSDate *now = [[NSDate alloc] init]; 
     NSString *theDate = [dateFormat stringFromDate:now]; 
     NSLog(@"\n" 
       "theDate: |%@| ", theDate); 

     UIImage *image = [self.arrImages objectAtIndex:imagecount]; 
     imagecount++; 


     NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.7f)]; 
     NSLog(@"Data is %@",imageData); 

     NSString *baseurl = @"My URL"; 

     NSURL *dataURL = [NSURL URLWithString:baseurl]; 

     NSMutableURLRequest *dataRqst = [NSMutableURLRequest requestWithURL:dataURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; 

     [dataRqst setHTTPMethod:@"POST"]; 

     NSString *stringBoundary = @"0xKhTmLbOuNdArY---This_Is_ThE_BoUnDaRyy---pqo"; 
     NSString *headerBoundary = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]; 

     [dataRqst addValue:headerBoundary forHTTPHeaderField:@"Content-Type"]; 

     NSMutableData *postBody = [NSMutableData data]; 


     [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@\"\r\n",[NSString stringWithFormat:@"%@.png",theDate]] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:imageData]; 
     [postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

     [postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [dataRqst setHTTPBody:postBody]; 

     NSHTTPURLResponse* response =[[NSHTTPURLResponse alloc] init]; 
     NSLog(@"Response is %@",response); 
     NSError* error = nil ; 
     NSLog(@"Error is %@",error); 
     NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:dataRqst delegate:self]; 
     NSLog(@"Connection is %@",conn); 
    } 

    #pragma mark NSURLConnection Delegate Methods 

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

     self.receiveData = [[NSMutableData alloc] init]; 
    } 

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

     [self.receiveData appendData:data]; 


     NSError* error; 

     NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 

                  options:kNilOptions 

                   error:&error]; 
     NSLog(@"json..%@",json); 

     if (imagecount <[self.arrImages count]) { 

      [self submit]; 
     } 

     else 
    { 

      UIAlertView *alert= [[UIAlertView alloc] initWithTitle:nil 
                  message:@"Data uploaded successfully" 
                  delegate:nil 

                cancelButtonTitle:nil 

               otherButtonTitles:nil, nil] ; 
      [alert show]; 
     } 

    } 

    - (NSCachedURLResponse *)connection:(NSURLConnection *)connection 
         willCacheResponse:(NSCachedURLResponse*)cachedResponse { 

     return nil; 
    } 

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    } 

    -(void)connection:(NSURLConnection *)connection didSendBodyData: 

    (NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten 

    totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 
    { 

    } 

我的選擇圖片的代碼是這樣的:

- (IBAction)Select:(id)sender 
    { 
    CreolePhotoSelection *objCreolePhotoSelection= [[CreolePhotoSelection alloc] initWithNibName:@"CreolePhotoSelection" bundle:nil]; 
    objCreolePhotoSelection.strTitle = @"Images"; 
    objCreolePhotoSelection.delegate = self; // It will help to retrive all selected photos from CreolePhotoSelection 
    objCreolePhotoSelection.arySelectedPhoto = _arrImages; // You need to pass same array which is holding selected image 
    objCreolePhotoSelection.maxCount = 50; // Eg. 5, 10 anythings... 

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:objCreolePhotoSelection]; 
    [self.navigationController presentViewController:navController animated:YES completion:nil]; 

} 

及其功能是這些:

-(void)getSelectedPhoto:(NSMutableArray *)aryPhoto 

{ 
    // //Initlize array 

    // NSArray *aryAlImage = [aryPhoto valueForKeyPath:@"mainImage"]; 

    // 

    // NSMutableArray *ary = [[NSMutableArray alloc] initWithArray:aryAlImage]; 

    _arrImages = nil; 

    _arrImages = [NSMutableArray new]; 

    _arrImages = [aryPhoto mutableCopy]; //mainImage, Asset, selected 

    [self setImageToScrollview:_arrImages]; 

} 

#pragma mark - Display Image to ScrollView 
-(void)setImageToScrollview:(NSMutableArray *)arrSetImage 

{ 
    // Remove all images from ScrollView and then add new one 

    for(id sender in _scrImageDisplay.subviews) 

     [sender removeFromSuperview]; 

    _scrImageDisplay.pagingEnabled = FALSE; 

    CGFloat height_width = CGRectGetHeight(_scrImageDisplay.frame); 

    NSInteger numberOfImages = arrSetImage.count; 


    NSLog(@"Size of array is %ld",(long)numberOfImages); 

    CGFloat xOrigin = 0; 

    for (int i = 0 ; i < numberOfImages ; i++) 

    { 
     xOrigin += 3; 

     CGRect rect = CGRectMake(xOrigin, 0,height_width,height_width); 

     UIImageView *Arrimage = [[UIImageView alloc] initWithFrame:rect]; 

     Arrimage.image = [[arrSetImage objectAtIndex:i] valueForKey:@"mainImage"]; 

     NSLog(@"Image data is %@",Arrimage); 

     Arrimage.contentMode = UIViewContentModeScaleAspectFill; 

     Arrimage.clipsToBounds = YES; 

     [_scrImageDisplay addSubview:Arrimage]; 

     xOrigin += height_width; 

    } 

    _scrImageDisplay.contentSize = CGSizeMake(xOrigin, height_width); 
} 
+0

看來,行'UIImage * image = [self.arrImages objectAtIndex:imagecount];'是造成這個問題。你可以檢查是這種情況嗎?如果是,'[self.arrImages objectAtIndex:imagecount];'是一個'NSDictionary',而不是'UIImage'對象。你可以登錄'[self.arrImages objectAtIndex:imagecount];'? – Larme

+0

實際上,我也認爲這行是導致問題,arrImages包含其中的所有圖像。 @Larme –

+0

Log'[self.arrImages objectAtIndex:imagecount];',這是'NSDictionary'。我不知道你是如何填充'self.arrImages',但這應該是問題。 – Larme

回答

1

您可以使用NSURLSession執行圖像上傳任務。這是代碼。

NSDictionary *headers = @{ @"content-type": @"application/json", 
          @"cache-control": @"no-cache", 
          }; 
NSDictionary *parameters = @[ @{ @"image": @「BASE_64_STRING」, @"proeprty_id": @"1", @"name": @"asd.png" } ]; 

NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:YOUR_SERIVCE_URL] 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy 
                timeoutInterval:10.0]; 
[request setHTTPMethod:@"POST"]; 
[request setAllHTTPHeaderFields:headers]; 
[request setHTTPBody:postData]; 

NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request 
              completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
               if (error) { 
                NSLog(@"%@", error); 
               } else { 
                NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
                NSLog(@"%@", httpResponse); 
               } 
              }]; 
[dataTask resume]; 
+0

如果我想將圖像的未來名稱存儲在變量中並將其傳遞給名稱參數,該怎麼辦? –

+0

您可以放置​​儘可能多的段落,以便在參數Dic中的服務器上發送。 – Nirmalsinh

+0

非常感謝。 :) @Nirmalsinh –

0
-(void)submit { 
     for (int i=0; i<_arrImages.count; i++) 
     { 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"yyyyMMddHHmmss"]; 
     NSDate *now = [[NSDate alloc] init]; 
     NSString *theDate = [dateFormat stringFromDate:now]; 
     NSLog(@"\n""theDate: |%@| ", theDate); 
     UIImage *image = [self.arrImages objectAtIndex:i]; 
     NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.7f)]; 
     NSLog(@"Data is %@",imageData); 
     NSString *baseurl = @"My URL"; 
     NSURL *dataURL = [NSURL URLWithString:baseurl]; 
     NSMutableURLRequest *dataRqst = [NSMutableURLRequest requestWithURL:dataURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; 
     [dataRqst setHTTPMethod:@"POST"]; 
     NSString *stringBoundary = @"0xKhTmLbOuNdArY---This_Is_ThE_BoUnDaRyy---pqo"; 
     NSString *headerBoundary = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]; 
     [dataRqst addValue:headerBoundary forHTTPHeaderField:@"Content-Type"]; 
     NSMutableData *postBody = [NSMutableData data]; 
     [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@\"\r\n",[NSString stringWithFormat:@"%@.png",theDate]] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:imageData]; 
     [postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [dataRqst setHTTPBody:postBody]; 
     NSHTTPURLResponse* response =[[NSHTTPURLResponse alloc] init]; 
     NSLog(@"Response is %@",response); 
     NSError* error = nil ; 
     NSLog(@"Error is %@",error); 
     NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:dataRqst delegate:self]; 
     NSLog(@"Connection is %@",conn); 
     } 
    } 
+0

通過你的回答給我這個錯誤,***終止應用程序,由於未捕獲的異常'NSInvalidArgumentException',原因:' - [__ NSDictionaryM CGImage]:無法識別的選擇發送到實例0x60000024a6e0' 。 @Monang Champaneri –

+0

給我發的信息給.m文件的完整源代碼 –

+0

給你emailid或者skype id。 @Monang Champaneri –