-1

シングルトンを使用しているアプリがあります。.h ファイルのコードは次のとおりです。

@interface SingletonServicesType : NSObject  {
}
@property (nonatomic, retain) NSNumber *globalServicesType;

+ (id)sharedInstance;
@end

.m ファイルのコードは次のとおりです。

//-------------------------------------------
//--  SingletonServicesType
@implementation SingletonServicesType  {  

}

@synthesize globalServicesType;  //  rename

//--  sharedInstance  --
+ (id)sharedInstance  {

static dispatch_once_t dispatchOncePredicate = 0;
__strong static id _sharedObject = nil;
dispatch_once(&dispatchOncePredicate, ^{
    _sharedObject = [[self alloc] init];
});

return _sharedObject;
}

-(id) init {
self = [super init];
if (self) {
    globalServicesType = [[NSNumber alloc] init];
}
return self;
}

@end

AppDelegate.m でシングルトンの初期値を設定するコードは次のとおりです。

    //  set services
SingletonServicesType *sharedInstance = [SingletonServicesType sharedInstance];  //  initialize
if(preferenceData.aServicesType == nil)  {
    sharedInstance.globalServicesType = 0;  //  (0) is the default
    preferenceData.aServicesType = 0;  //  here too...
    [localContext MR_saveNestedContexts];  //  save it...
}
else
    sharedInstance.globalServicesType = preferenceData.aServicesType;  //  0 = default (nails), 1 = custom

NSLog(@"\n\n1-sharedInstance.globalServicesType: %@", [NSNumber numberWithInt: (sharedInstance.globalServicesType)]);  //  shows a value of '0'

別のクラスのシングルトンの値をすぐに調べると、「null」です。そのコードは次のとおりです。

    SingletonServicesType *sharedInstance = [SingletonServicesType sharedInstance];  //  initialize
NSLog(@"\n\n2-sharedInstance.globalServicesType: %@", sharedInstance.globalServicesType);  //  shows a value of 'null'

値が設定を維持している理由がわかりません。何か不足していますか?

4

1 に答える 1

4

これは、 にゼロを代入しているためですNSNumber*[NSNumber numberWithInt:0]またはを割り当てる必要があります@0。そうしないと、整数はアドレスとして解釈されます。

sharedInstance.globalServicesType = @0; // <<== Here
于 2013-08-17T16:55:48.090 に答える