0

渡された値を1つだけ含むシングルトンクラスを使用しました。次に、もう1つ追加しようとしました。

#import <Foundation/Foundation.h>

@interface GlobalValueContainer : NSObject {


    NSString *passedText;
    NSString *myPassedPictureName;
}


@property (nonatomic, strong) NSString* passedText;
@property (nonatomic, strong) NSString* myPassedPictureName;


+ (GlobalValueContainer *) sharedStore;

@end


#import "GlobalValueContainer.h"

@implementation GlobalValueContainer;

@synthesize passedText;
@synthesize myPassedPictureName;

static GlobalValueContainer *sharedStore = nil;


+ (GlobalValueContainer *) sharedStore {
    @synchronized(self){
        if (sharedStore == nil){
            sharedStore = [[self alloc] init];
        }
    }

    return sharedStore;
}


@end

最初のビューから、次に設定しようとしますmyPassedPictureName

-(IBAction)setPicture:(id)sender{

    myPicture = @"Hus";
    GlobalValueContainer* localContainer = [GlobalValueContainer sharedStore];
    localContainer.myPassedPictureName = myPicture;


}

2番目のビューでは、その名前(+ png)でimageviewを設定します

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Store* myStore = [Store sharedStore];


    GlobalValueContainer* localContainer = [GlobalValueContainer sharedStore];
    myPassedPictureName = localContainer.myPassedPictureName;
    myPicture.image = [UIImage imageNamed:myPassedPictureName];
    whatFile.text = myPassedPictureName;

   //object.imageView.image = [UIImage imageNamed:@"downloadedimage.png"];

}

写真は表示されません。また、UIlabelを追加して、渡されるはずの文字列を設定しようとしました。しかし、それも空白になります。

「passedText」を使用してテキストを渡すと、正常に機能します。2番目のNSStringを追加しても、何も起こりません。

まず最初に。誰もが何が悪いのかを知ることができますか(まだここでobj cを学習しています:)、それは私がを操作しようとする正しい方法ですかUIImageView?押しているボタンに応じて、を使っmyPassedPictureNameて何秒も画像を設定したい。UIView

ご意見をお待ちしております。

4

2 に答える 2

0

このように値を渡すためにシングルトンを使用するのは良い考えではないと確信しています。シングルトンは値を渡すためではなく、何かを行うために設計されています。したがって、
sharedManager.passValue
ここのようなプロパティを使用することはできません。シングルトンについていくつかの良い議論があります。
静的クラスの代わりにシングルトンパターンを使用する必要があるのはいつですか?
そして
私のObjective-Cシングルトンはどのように見えるべきですか?
だから私はそれをこのように書くことをお勧めします:

#import <Foundation/Foundation.h>

@interface GlobalValueContainer : NSObject {

}

+ (id) sharedManager;
-(NSString*)myText;
-(NSString*)myPictureName;

@end


#import "GlobalValueContainer.h"

@implementation GlobalValueContainer;


static GlobalValueContainer *sharedManager = nil;


+ (id) sharedManager {
    @synchronized(self){
        if (sharedManager == nil){
            sharedManager = [[self alloc] init];
        }
    }

    return sharedManager;
}

-(NSString*)myText
{
    return @"your text";
}
-(NSString*)myPictureName
{ 
    return @"yourPictureName.png";
}  
@end
于 2012-09-21T03:31:19.573 に答える
0

変数「myPassedPictureName」がファイルへのURLである場合、このメソッドを使用することはできません。

 [UIImage imageNamed:myPassedPictureName];

あなたが使用する必要があります

NSData *data = [[NSData alloc] initWithContentsOfURL:myPassedPictureName];
UIImage *image = [[UIImage alloc] initWithData:data];
于 2012-09-21T21:50:44.733 に答える