【问题标题】:How to set/get UIImageView.image through Singleton?如何通过 Singleton 设置/获取 UIImageView.image?
【发布时间】:2013-11-01 17:00:37
【问题描述】:

我有两个 ViewController。

FirstViewController 有 UILabels 和 UIImageViews。还从其类中生成了一个 Singleton。 SecondViewController 调用了那个 Singleton,应该从 FirstViewController 获取 UILabels 和 UIImageViews 的值。

NSString 有效,UILabel 无效。

例如,使用“sharedFirstViewController.nsstringvarname”访问 SecondviewController 中的 NSString,我可以 GET 和 SET 值。 这很好用!

尝试使用类似这样的 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

}

【问题讨论】:

  • 代码和具体错误将有助于找出问题所在
  • 向您展示如何制作单例类及其变量的代码

标签: objective-c nsstring singleton uilabel


【解决方案1】:

我确定你忘记在单例类的 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 因为你在生成单例实例时没有提到你的视图控制器笔尖。在 xib 中处理 UI 时使用 IBOutlet。

【讨论】:

  • 试过了,但也没有成功。为什么 UIImageView 需要这个,而 NSString 没有这个也能工作?
  • 在 sharedFirstViewController.pic.image 上设置断点 = 图片行跟踪 singlton 类变量分配并打印 pic 描述并显示调试器输出。
  • 用 init 方法显示你的代码你曾经尝试过什么使用更新问题。
  • _pic UIImageView * nil 0x00000000
  • 是的,编译器对此给出了错误,所以我在第一次测试您的代码时就这样做了。使用您的初始化代码编辑问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2019-06-27
  • 1970-01-01
相关资源
最近更新 更多