0

我使用了一个只包含一个传递值的单例类。然后我尝试添加另一个。

#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;


}

在第二个视图上,我想设置一个具有该名称的图像视图(即 +png)

- (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”传递文本时,它工作正常。当我添加第二个 NSString 时,什么也没发生?

第一件事。任何人都可以看到有什么问题(仍然在这里学习 obj c :) 并且,这是我尝试操纵UIImageView. 我想使用s 根据按下的按钮在myPassedPictureName多个 s 上设置图片。UIView

期待您的输入。

4

2 回答 2

0

如果变量“myPassedPictureName”是文件的 URL,那么您不能使用此方法:

 [UIImage imageNamed:myPassedPictureName];

你应该使用

NSData *data = [[NSData alloc] initWithContentsOfURL:myPassedPictureName];
UIImage *image = [[UIImage alloc] initWithData:data];
于 2012-09-21T21:50:44.733 回答
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 回答