我有两个ViewControllers。
FirstViewController有UILabels和UIImageViews。还从其类中生成了一个Singleton。 SecondViewController调用了Singleton,并且应该从FirstViewController获取UILabels和UIImageViews的值。
NSString有效,UILabel没有。
例如,使用“ sharedFirstViewController.nsstringvarname ”在SecondviewController中访问 NSString 我可以获取并设置值。 这很好用!
尝试使用 UILabel ,如下所示:“ sharedFirstViewController.uilabelvar.text ”我不能设置或获取此UILable的值。 这不起作用!
UI-Objects有什么特别的东西吗? 如果有人可以帮助我,那会很棒。 谢谢!
编辑:
在FirstViewController.h中
+ (id)sharedFirstViewController;
@property (copy, nonatomic) NSString *path;
@property (strong, nonatomic) IBOutlet UIImageView *pic;
在FirstViewController.m中
@synthesize path= _path;
@synthesize pic = _pic;
- (id)init {
if (self = [super init]) {
_pic = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
}
return self;
}
+ (id) sharedFirstViewController {
static sharedFirstViewController * sharedFirstViewController = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedFirstViewController = [[self alloc] init];
});
return sharedFirstViewController;
}
在SecondViewController.m中
#import "FirstViewController.h"
- (void)viewDidLoad
{
FirstViewController * sharedFirstViewController = [FirstViewController sharedFirstViewController];
NSLog(@"this is NSString from FVC: %@" sharedFirstViewController.path); //works
UIImage * picture = [UIImage imageWithContentsOfFile:sharedFirstViewController.path];
sharedFirstViewController.pic.image = picture; // does´t work
}
答案 0 :(得分:0)
我确定你忘了在singleton类的init方法中给UIImageview * pic分配。那是因为您的代码正在运行但没有任何崩溃和警告。如果您调试代码,您将获得imageview内存分配0X0。检查一下。
- (id)init {
if (self = [super init]) {
_pic = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
}
return self;
}
在FirstViewController.m类中编写上面的方法。他们不需要在UIImageView * pic之前编写IBOutlet,因为在生成单例实例时你没有提到你的viewcontroller nib。无论何时在xib中处理UI,都要使用IBOutlet。