私はObjective-Cクラスを作成しました。私はiPhoneプロジェクトのいくつかのビューでその共有インスタンスを使用しています。メンバ変数にはbool、ints、NSStrings、NSNumberがあります。共有インスタンスは、共有インスタンスが2回目以降にアクセスされると、デバッガから私に「範囲外」と通知されたNSNumberを除いて、アプリケーションのスコープ全体で正常に動作しているようです。NSNumberが範囲外ですか?
UserData *userData
userData = [[UserData getSharedUserData] retain];
と同じように、別のビューで:
はここで...だから、それはこのように一つのビューにアクセスした
// 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
を私がやっているの概要です。しかし、2回目にアクセスすると、grossWageメンバーは範囲外ですが、それ以外のものは問題ありません。これが理由です。何か案は?
私は初めにメンバーにキャスティングや他の操作をしたいと思っていたようにアクセサーを書いていましたが、今は簡単にするためにそれらを取り除くことができるようです。私はアクセッサメソッドをバイパスしようとしました、grossWageを@propertyとして定義して直接設定し、それはトリックを行ったようです...多くの感謝!これが問題ではないことが判明した場合、私は戻ってきます。私はメモリ管理についてもう少し詳しく読む必要があるように見えます。 – moigno