1

私は2つのViewControllerを持っています。

FirstViewController には UILabels と UIImageViews があります。また、そのクラスからシングルトンを生成しました。SecondViewController にはそのシングルトンの呼び出しがあり、FirstViewController から UILabels と UIImageViews の値を取得する必要があります。

NSString は機能しますが、UILabel は機能しません。

たとえば、「sharedFirstViewController.nsstringvarname 」を使用して SecondviewController のNSStringにアクセスし、値を GET および SET できます。 これはうまくいきます!

「 sharedFirstViewController.uilabelvar.text 」のようなUILabelで同じことを試してみてください。この UILable の値を SET または GET することはできません。 これは機能しません。

UI オブジェクトに何か特別なことはありますか? 誰かがそれで私を助けることができれば素晴らしいでしょう. ありがとう!

編集:

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

}
4

1 に答える 1

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 クラスに記述します。シングルトンインスタンスの生成中にviewcontroller nibについて言及していないため、UIImageView *picの前にIBOutletを書き込む必要はありません。xib で UI を扱う場合は常に IBOutlet を使用してください。

于 2013-11-01T17:06:40.187 に答える