我有一个数据对象,我希望在我的 iOS 应用程序的所有不同视图之间随意存储、访问和修改。基本设计前提如下图所示。让我感兴趣的是,如果我用 NSString 替换 NSMutableArray,一切正常,没什么大不了的,但是当我把它变成一个数组并在其中存储一个字符串时,它就吓坏了。我选择了一个数组,因为我需要同时存储不同版本的 userData,而在实际的应用程序中,不仅仅是一个用户数据变量。
我正在使用 ARC,但我不得不承认我不清楚我是否正确使用它。建议表示赞赏。
// data.h
@interface Data : NSObject
@property (nonatomic, retain) NSMutableArray *data;
@property (assign) NSNumber *Num; // determines which "level" on the array we're accessing
+(id) sharedInstance;
@end
// data.m
+(id) sharedInstance
{
static id sharedInstance = nil;
if (sharedInstance == nil) {
sharedInstance = [[self alloc] init];
}
return sharedInstance;
}
- (id)init
{
self = [super init];
if (self)
{
_Num = [NSNumber numberWithInt:0];
_data = [NSMutableArray array];
}
return self;
}
// userInput.h
@property (strong, nonatomic) IBOutlet UITextField *userData;
@property (nonatomic, retain) Data *dataStore;
在这里,我向我的数据对象添加了一个空字符串,因为没有任何用户输入是强制性的,但是当没有输入时我需要知道这一点,所以我至少使用一个空字符串。
// userInput.m
viewDidLoad
{
_dataStore = [Data sharedInstance];
[_dataStore.data addObject:@""];
}
prepareForSegue
{
int num = [_dataStore.Num intValue];
NSString *transferData = [NSString stringWithFormat:@"%@", _userData.text];
[_dataStore.data replaceObjectAtIndex:num withObject:transferData]; // crash at this line. replacing the empty string with whatever the user inputs
}
崩溃报告
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM replaceObjectAtIndex:withObject:]: index 0 beyond bounds for empty array'