私は Objective-C クラスを作成し、その共有インスタンスを iPhone プロジェクトのいくつかのビューで使用しています。そのメンバー変数には、bools、ints、NSStrings、および 1 つの NSNumber が含まれます。共有インスタンスは、共有インスタンスが 2 回目以降にアクセスされると、デバッガーが「範囲外」であると通知する NSNumber を除いて、私のアプリケーションの範囲全体で問題なく動作するようです。
ここで私がやっていることの簡単な概要です...
// UserData.h
@interface UserData : NSObject {
TaxYears selectedTaxYear;
NSNumber *grossWage; // <--- this is the troublesome member
// ...
NSString *other;
int age;
}
+ (UserData *)getSharedUserData;
@end
// UserData.m
#import "UserData.h"
@implementation UserData
static UserData *sharedUserData = nil; // Points to the shared object
+ (UserData *)getSharedUserData {
if(sharedUserData == nil) {
sharedUserData = [[UserData alloc] initWithTaxYear:0];
[[NSNotificationCenter defaultCenter]
addObserver:sharedUserData
selector:@selector(doTerminate:)
name:UIApplicationWillTerminateNotification
object:nil];
}
return sharedUserData;
}
- (id)initWithTaxYear:(TaxYears)theTaxYear {
if ((self = [super init])) {
}
return self;
}
- (void)updateGrossWage:(NSNumber *)theGrossWage {
grossWage = theGrossWage;
}
- (NSNumber *)getGrossWage {
return grossWage;
}
// ...
@end
したがって、次のように 1 つのビューでアクセスできます。
UserData *userData
userData = [[UserData getSharedUserData] retain];
そして、同じように別のビューで。しかし、2 回目にアクセスすると、grossWage メンバーは範囲外になりますが、それ以外はすべて問題ありません。これが私が困惑している理由です。何か案は?