UIImageView不会在其中显示已分配的图像

时间:2014-08-13 10:20:18

标签: ios objective-c uiimage

我想在单例类中存储一些UIImages。我这样做了

在我的singleton.h课程中

@property(nonatomic,strong)UIImage *img1;
@property(nonatomic,strong)UIImage *img2;
@property(nonatomic,strong)UIImage *img3;
@property(nonatomic,strong)UIImage *img4;

在我的.m课程中

@synthesize img1,imgCover,img2,img3,img4;

+ (MyProductClass *)sharedManager {
    @synchronized(self) {
    if (sharedService == nil) {
        sharedService = [[super allocWithZone:NULL] init];
        }
    }
    return sharedService;
}

- (id)copyWithZone:(NSZone *)zone {
    return self;
}
-(id)init {
    self = [super init];
    if (self != nil) {
        // initialize stuff here
        imgCover=[[UIImage alloc] init];
        img1=[[UIImage alloc] init];
        img2=[[UIImage alloc] init];
        img3=[[UIImage alloc] init];
        img4=[[UIImage alloc] init];   
    }
    return self;
}

然后我的第一个viewcontroller即像这​​样在Singleton class中存储图像。 myproductObj单例类对象

UIImage *imgSelected=[info objectForKey:UIImagePickerControllerOriginalImage];
myproductObj.img1=imgSelected;

然后我在anotherviewcontroller中检索图像(实际上这是以前的Viewcontroller到存储视图控制器)

-(void)viewWillAppear:(BOOL)animated {
    if ([appstatusClass.strIsImageselected isEqualToString:@"Yes"]) {
        int count=[appstatusClass.strnumberofImageSelected intValue];
        scrollViewImage.pagingEnabled=YES;
        [scrollViewImage setContentSize:CGSizeMake(scrollViewImage.bounds.size.width*count, scrollViewImage.bounds.size.height)];
    }
    if (count==1) {
        scrollViewImage.scrollEnabled=YES;
        imageAddphoto.image=myproduct.img1;
    }
}

当我查看这些

时,这是我的日志猫
(lldb) po myproduct.imgCover
<UIImage: 0x15ea4000>

(lldb) po imageAddphoto.image
<UIImage: 0x15ea4000>

但我的imageAddphoto图片视图为空白。它不显示任何图像。如果我设置像imageAddphoto.image=[UIImage imageNamed:@"Car.png"]这样的图像,则会显示。但为什么我的单身人像可以显示呢?

2 个答案:

答案 0 :(得分:0)

在你的单例类中创建了一个img1对象,它会在你打印时显示该对象的地址。

您没有将图像存储在单件类中,它将不返回任何图像。

答案 1 :(得分:0)

为了使用单身人士课程,你将不得不做一些修改。

MyProductClass.m中(这是您对Singleton.m的意思,对吧?)

// Be sure to declare a static representation of sharedService
static MyProductClass *sharedService;
@implementation

现在,当您实际为单例设置值时,应该完成类似于以下操作:

[[MyProductClass sharedService] setImg1: imgSelected];

应该使用以下内容来访问单个类的值:

[[MyProductClass sharedService] img1]; 

另外,我会对MyProductClass.m进行一些更改。这些变化详述如下。

// In your singleton class, the class method sharedManager should share the same value as your static variable `sharedService`. Further, you should actually set sharedService a little differently than you do.
+ (MyProductClass *)sharedManager {
@synchronized(self) {
if (sharedService == nil) {
    sharedService = [[super allocWithZone:NULL] init];
    }
}
return sharedService;
} 

应该是:

+ (MyProductClass *)sharedService {
    if (!sharedService) {
    sharedService = [[MyProductClass alloc] init];
    }
    return sharedService;
}

最后,如果您选择使用allocWithZone:(单身人士无需工作),请务必覆盖该方法。做这样的事情就足够了:

+ (id)allocWithZone:(NSZone *)zone
{
    if (!sharedService) {
        sharedService = [super allocWithZone:zone];
        return sharedService;
    } else {
        return nil;
    }
}