2017-07-31 42 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 –