我想在单例类中存储一些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"]
这样的图像,则会显示。但为什么我的单身人像可以显示呢?
答案 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;
}
}