NSLog未在块内调用

时间:2015-08-23 11:16:48

标签: ios objective-c nsmutablearray objective-c-blocks

当我把它放在一个块里时,我的replaceObjectatIndex:withObject:没有被调用。我知道这一点,因为当我在外部块中NSLog时,值不会改变。为什么在外部块中的方法没有调用内部块中的方法?有什么不同? 这是代码:

if (cell.selected) {
    [[SDImageCache sharedImageCache] queryDiskCacheForKey:imageID
                                                     done:^(UIImage *image, SDImageCacheType cacheType)
     {
         // image is not nil if image was found
         if (image == nil) {
             //image is not found
             [SDWebImageDownloader.sharedDownloader downloadImageWithURL:[NSURL URLWithString:link]
                                                                 options:0
                                                                progress:^(NSInteger receivedSize, NSInteger expectedSize)
              {
                  // progression tracking code
              }
                                                               completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
              {
                  if (image && finished)
                  {
                      // image is finished being downloaded
                      // resize image
                      UIImage *resizedImage = [self imageWithImage:image forRowAtIndexPath:indexPath];
                      // store resized image in cache
                      [[SDImageCache sharedImageCache] storeImage:resizedImage forKey:imageID];
                      //set image view to resized image
                      [textCell.testImage setImage:resizedImage];
                      [self.heightArray replaceObjectAtIndex:indexPath.row
                                                  withObject:[NSNumber numberWithFloat:image.size.height]];
                  }
                  //delete original sized image
                  image = nil;
              }];
         } else {
             //image is found
             [textCell.testImage setImage:image];
             NSLog(@"image found %@", [self.heightArray objectAtIndex:indexPath.row]);
         }
     }];
} else {
    //cell is not selected
    textCell.testImage.image = nil;
}

顺便说一句,setImage:方法工作得很好但不是replaceObjectatIndex:withObject:

1 个答案:

答案 0 :(得分:1)

我不知道你在做什么,但我在你的代码中发现了一个问题:即使你将它设置为nil,你也在使用该图像。

<强>校正:

//delete original sized image - 
//??image = nil;
[self.heightArray replaceObjectAtIndex:indexPath.row
                                              withObject:[NSNumber numberWithFloat:image.size.height]];
image = nil;