我已经编写了一个 Objective-C 类,并且在我的 iPhone 项目中的多个视图中使用了它的共享实例。它的成员变量包括 bools、ints、NSStrings 和一个 NSNumber。共享实例似乎在我的应用程序范围内工作得很好,除了调试器告诉我的 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
所以它可以在一个视图中访问,如下所示:
UserData *userData
userData = [[UserData getSharedUserData] retain];
在另一个视图中以同样的方式。但是第二次访问它时,grossWage 成员超出了范围,但其他一切都很好——这就是我难过的原因。有任何想法吗?