0

我有一个以这种方式实现的单例:

PhotoViewController* sharedSingleton = [PhotoViewController sharedManager];

我知道要启动一个方法,我必须做 [sharedSingleton 方法];

但是如果我想将 PhotoViewController.h 文件中声明的整数更改为 NSInteger* tagNumber,我可以这样做吗?我试过这个:

[sharedSingleton.tagNumber = 1];

但它不起作用!

编辑:

错误:在 photoViewController 类型的对象上找不到属性 tagNUMber

@interface PhotoViewController : UIViewController{

BOOL newMedia;
UIPopoverController *popoverController;
DBRestClient *restClient;
NSInteger* tagNumber;
}

+ (PhotoViewController *) sharedManager;

@end
4

1 回答 1

1

单例是常规对象。唯一的区别是只会从类中创建一个实例。

如果您无法设置 tagNumber,则很可能正在发生其他类型的编码错误......也许 tagNumber 属性是在类扩展中声明的,从而使访问器/突变器方法成为私有?

如果您使用 tagNumber 的声明方式编辑您的问题,并且还包括您收到的错误消息,我将能够编辑此答案并为您提供更具体的建议。

编辑: ...是的,绝对要仔细检查以确保您没有将 NSInteger 声明为指针... NSInteger 是标量类型(因此它采用直接值,并且不使用取消引用' *' 操作员)。

我建议使用属性而不是直接访问实例变量:

@interface PhotoViewController : UIViewController

@property (nonatomic, assign) BOOL newMedia;
@property (nonatomic, strong) UIPopoverController *popoverController;
@property (nonatomic, strong) DBRestClient *restClient;
@property (nonatomic, assign) NSInteger tagNumber;

+ (PhotoViewController *) sharedManager;

@end

然后将不带括号的变量设置为:

sharedSingleton.tagNumber = 1;
于 2012-11-30T13:01:59.597 回答