title: Programmatically changing desktop image
body: <p>I am trying to change the desktop image; the procedure I've come up with is below. The first time this code is run, the resized image is displayed on screen as wallpaper, but the next time there is no reaction. What am I doing wrong?</p>
  
  <pre><code>-(IBAction)click:(id)sender
  {
      NSData *sourceData;
      NSError *error;
      NSFileManager *filemgr;
      filemgr = [NSFileManager defaultManager];
      screenArray = [NSScreen screens];
      screenCount = [screenArray count];
      unsigned index  = 0;
  
      for (index; index &lt; screenCount; index++)
      {
          screenz = [screenArray objectAtIndex: index];
          screenRect = [screenz visibleFrame];
  
      }
      NSLog(@"%fx%f",screenRect.size.width, screenRect.size.height);
  
      arrCatDetails = [strCatDetails  componentsSeparatedByString:appDelegate.strColDelimiter];
  
      NSString *imageURL = [NSString stringWithFormat:@"upload/product/image/%@_%@_%d.jpg",[arrCatDetails objectAtIndex:0],appDelegate.str104by157Name,iSelectedImgIndex];
      NSString *ima = [imageURL lastPathComponent];
      NSString *str = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
      NSString *dataFilePath = [str stringByAppendingPathComponent:ima];
      NSString *imagePath = [NSString stringWithFormat:@"file://localhost%@",dataFilePath];
      NSURL *url = [[NSURL alloc] init];
      url = [NSURL URLWithString:imagePath];
      sourceData =  [NSData dataWithContentsOfURL:url];  
      sourceImage = [[NSImage alloc] initWithData: sourceData];
      resizedImage = [[NSImage alloc] initWithSize: NSMakeSize(screenRect.size.width, screenRect.size.height)];
      NSSize originalSize = [sourceImage size];
      [resizedImage lockFocus];
      [sourceImage drawInRect: NSMakeRect(0, 0, screenRect.size.width, screenRect.size.height) fromRect: NSMakeRect(0, 0, originalSize.width, originalSize.height) operation: NSCompositeSourceOver fraction: 1.0];
      [resizedImage unlockFocus];
      NSData *resizedData = [resizedImage TIFFRepresentation];
      NSBitmapImageRep* theImageRepresentation = [NSBitmapImageRep imageRepWithData:resizedData];
      newimage = @"editwall.jpg";
      newFilePath = [str stringByAppendingPathComponent:newimage];
      NSData* theImageData = [theImageRepresentation representationUsingType:NSJPEGFileType properties:nil];
      [theImageData writeToFile: newFilePath atomically: YES];
  
      if([filemgr fileExistsAtPath:newFilePath] == YES)
      {   
          imagePath1 = [NSString stringWithFormat:@"file://localhost%@",newFilePath];
  
          urlz = [NSURL URLWithString:imagePath1];
  
          NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:nil, NSWorkspaceDesktopImageFillColorKey, [NSNumber numberWithBool:NO], NSWorkspaceDesktopImageAllowClippingKey, [NSNumber numberWithInteger:NSImageScaleProportionallyUpOrDown], NSWorkspaceDesktopImageScalingKey, nil];
  
          [[NSWorkspace sharedWorkspace] setDesktopImageURL:urlz forScreen:[[NSScreen screens] lastObject]  options:options error:&amp;error];
  
      }
      else 
      {
          NSLog(@"No");
      }
  
      [sourceImage release];
      [resizedImage release];
  }
  </code></pre>