如何通过Singleton设置/获取UIImageView.image?

时间:2013-11-01 17:00:37

标签: objective-c nsstring singleton uilabel

我有两个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

}

1 个答案:

答案 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。