2012-03-02 117 views
1

我解析我的數據在這條路上:解析JSON圖像

NSDictionary *item = [tableData objectAtIndex:[indexPath row]]; 
    [[cell textLabel] setText:[item objectForKey:@"title"]]; 
    [[cell detailTextLabel] setText:[item objectForKey:@"description"]]; 

但是,有沒有辦法來解析細胞圖像?通常它是

UIImage *cellImage = [UIImage imageNamed:@"image.png"]; 
cell.imageView.image = cellImage; 

但我在尋找一種方式像

[[cell UIImage cellimage] .... 

類似的東西,所以我可以解析來自JSON的圖像URL在它

這可能嗎?

回答

1
NSURL *url = [NSURL URLWithString:[item objectForKey:@"image"]]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    cell.imageView.image = [UIImage imageWithData:data]; 

由於同步URL請求,這始終是一個壞事做設置一個最大寬度圖像

+1

這將阻止主線程,因爲UI不會迴應之前請求已完成。 – 2012-03-02 03:11:18

1
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar      // called when keyboard search button pressed 
{ 
    [spinner startAnimating]; 
    spinner.hidden=NO; 

    NSLog(@" Searchbar text = %@",searchBar.text); 
    strSearch=searchBar.text; 
    strSearch=[strSearch stringByReplacingOccurrencesOfString:@" " withString:@"+"]; 

    [searchBar resignFirstResponder]; 

    [self searchGooglePhotos]; 

} 
- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar     // called when cancel button pressed 

{ 
    [searchBar resignFirstResponder]; 
} 
-(void)searchGooglePhotos 
{ 

    // Build the string to call the Flickr API 
    NSString *urlString = [NSString stringWithFormat:@"http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=%@",strSearch]; 

    NSLog(@"urlarrystring is := %@",urlString); 
    // Create NSURL string from formatted string 
    NSURL *url = [NSURL URLWithString:urlString]; 

    // Setup and start async download 
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL: url]; 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [connection release]; 
    [request release]; 

} 


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


    // Store incoming data into a string 
    NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    // Create a dictionary from the JSON string 
    NSDictionary *respone = [jsonString JSONValue]; 
    //NSLog(@"result dict is :%@",respone); 

    // Build an array from the dictionary for easy access to each entry 
    urlarry = [[[respone valueForKey:@"responseData"] valueForKey:@"results"]valueForKey:@"url"]; 
    NSArray *title = [[[respone valueForKey:@"responseData"] valueForKey:@"results"]valueForKey:@"title"]; 
    MoreUrlarry=[[[respone valueForKey:@"responseData"] valueForKey:@"cursor"]valueForKey:@"moreResultsUrl"]; 
    [urlarry retain]; 
    NSLog(@"photourlarry is :%@",urlarry); 
    NSLog(@"phototitle is :%@",title); 
    NSLog(@"photoMoreUrlarry is :%@",MoreUrlarry); 

    NSData *data2; 

    NSString *str=[[NSString alloc] init]; 
    [scrl removeFromSuperview]; 
    [displayview removeFromSuperview]; 
    scrl=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 44,320, 430)]; 
    [scrl setContentSize:CGSizeMake(320*[urlarry count], 430)]; 
    scrl.pagingEnabled=YES; 

    //========== 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // Assign activity indicator to the pre-defined property (so it can be removed when image loaded) 
    //self.activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(55, 67, 25, 25)]; 

    // Start it animating and add it to the view 

    // Create multiple imageviews to simulate a 'real' application with multiple images 
    CGFloat verticalPosition = 10; 
    int i = 1; 
    for (i=1; i<5; i++) { 

     // Set vertical position of image in view. 
     if (i > 1) { 
      verticalPosition = verticalPosition+85; 
     } 

     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(122, verticalPosition, 80, 80)]; 
     imageView.tag = i; 
     [self.view addSubview:imageView]; 

     // set the image to be loaded (using the same one here but could/would be different) 

     NSString *str123=[urlarry objectAtIndex:i-1]; 



     NSURL *imgURL = [NSURL URLWithString:str123]; 

     // Create an array with the URL and imageView tag to 
     // reference the correct imageView in background thread. 
     NSMutableArray *arr = [[NSArray alloc] initWithObjects:imgURL, [NSString stringWithFormat:@"%d", i], nil ]; 

     // Start a background thread by calling method to load the image 
     [self performSelectorInBackground:@selector(loadImageInBackground:) withObject:arr]; 

    } 
    [pool release]; 
    /* 

    int x=10,y=50,p=250,q=20; 
    for (int i=0; i<[urlarry count]; i++) 
    { 

     str=[NSString stringWithString:[urlarry objectAtIndex:i]]; 
     data2 = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]]; 
     Favimage = [[UIImage alloc]initWithData:data2]; 

     markButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [markButton setFrame:CGRectMake(p, q, 35,20)]; 
     markButton.tag=i; 
     NSLog(@"tag is :%d",markButton.tag); 
     //[imgButton setTitle:[NSString stringWithFormat:@"%i",i] forState:UIControlStateNormal]; 
     //imgButton.contentMode=UIViewContentModeScaleAspectFit; 

     // [imgButton setBackgroundImage:[UIImage imageNamed:@"no.png"]forState:UIControlStateNormal]; 
     //[imgButton setImage:[Favimage imageScaledToFitSize:CGSizeMake(300, 320)] forState:UIControlStateNormal]; 
     [markButton addTarget:self action:@selector(mark_buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

     [scrl addSubview:markButton]; 


     UIButton *imgButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [imgButton setFrame:CGRectMake(x, y, 300,320)]; 
     imgButton.tag=i; 
     NSLog(@"tag is :%d",imgButton.tag); 
    //[imgButton setTitle:[NSString stringWithFormat:@"%i",i] forState:UIControlStateNormal]; 
     imgButton.contentMode=UIViewContentModeScaleAspectFit; 

    // [imgButton setBackgroundImage:[UIImage imageNamed:@"no.png"]forState:UIControlStateNormal]; 
     [imgButton setImage:[Favimage imageScaledToFitSize:CGSizeMake(300, 320)] forState:UIControlStateNormal]; 
     [imgButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

     //[imgButton setImage:Favimage forState:UIControlStateNormal]; 
     [scrl addSubview:imgButton]; 

     //UIImageView *imageview=[[UIImageView alloc] initWithFrame:CGRectMake(x, y, 90, 90)]; 
//  [imageview setImage:Favimage]; 
//  [scrl addSubview:imageview]; 


     NSLog(@"value of x=%d",x); 
     NSLog(@"value of y=%d",y); 

     NSLog(@"value of p=%d",p); 
     NSLog(@"value of q=%d",q); 
     NSLog(@"str is : %@",str); 

     if (y>=30) 
     { 
      //x=15; 
      x=x+320; 
     } 
     if (q>=0) 
     { 
      //x=15; 
      p=p+320; 
     } 
     //else 
//  { 
//   y=y+; 
    // } 



    }*/ 
    [spinner stopAnimating]; 

    spinner.hidden=TRUE; 
    [self.view addSubview:scrl]; 
    btnmore.hidden=NO; 

    //NSLog(@"str is : %@",str); 
// NSLog(@"j is : %d",j); 
// NSLog(@"p is : %d",p); 


} 

- (void) loadImageInBackground:(NSArray *)urlAndTagReference { 

    NSLog(@"Received URL for tagID: %@", urlAndTagReference); 

    // Create a pool 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // Retrieve the remote image. Retrieve the imgURL from the passed in array 
    NSData *imgData = [NSData dataWithContentsOfURL:[urlAndTagReference objectAtIndex:0]]; 
    UIImage *img = [[UIImage alloc] initWithData:imgData]; 

    // Create an array with the URL and imageView tag to 
    // reference the correct imageView in background thread. 
    NSMutableArray *arr = [[NSArray alloc] initWithObjects:img, [urlAndTagReference objectAtIndex:1], nil ]; 

    // Image retrieved, call main thread method to update image, passing it the downloaded UIImage 
    [self performSelectorOnMainThread:@selector(assignImageToImageView:) withObject:arr waitUntilDone:YES]; 

} 

- (void) assignImageToImageView:(NSArray *)imgAndTagReference 
{ 

    // Create a pool 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // loop 
    for (UIImageView *checkView in [self.view subviews]) { 
     NSLog(@"Checking tag: %d against passed in tag %d",[checkView tag], [[imgAndTagReference objectAtIndex:1] intValue]); 
     if ([checkView tag] == [[imgAndTagReference objectAtIndex:1] intValue]) { 

      // Found imageView from tag, update with img 
      [checkView setImage:[imgAndTagReference objectAtIndex:0]]; 

      //set contentMode to scale aspect to fit 
      checkView.contentMode = UIViewContentModeScaleAspectFit; 

      //change width of frame 
      CGRect frame = checkView.frame; 
      frame.size.width = 80; 
      checkView.frame = frame; 

     } 
    } 

    // release the pool 
    [pool release]; 

    // Remove the activity indicator created in ViewDidLoad() 
    //[self.activityIndicator removeFromSuperview]; 

} 

-(void)buttonPressed:(id)sender 
{ 

    UIButton *imgButton = (UIButton *)sender; 
    int q=imgButton.tag; 

    string=[[NSString alloc] init]; 
    string=[NSString stringWithString:[urlarry objectAtIndex:q]]; 

// NSLog(@"aap str is :%@",appDel.appstr); 
// [self.navigationController pushViewController:objimv animated:YES]; 

}