我正在尝试做一个 Singleton NSMutableArray,但是 count 函数总是显示 0 个元素。我猜它没有很好地接收该物体。
这是我创建的代码。
//VariableStore.h
@interface VariableStore : NSObject
{
NSMutableArray *pruebaGlobal;
}
@property (nonatomic, retain) NSMutableArray *pruebaGlobal;
+ (VariableStore *)sharedInstance;
- (NSMutableArray*)pruebaGlobal;
@end
//VariableStore.m
@implementation VariableStore
@synthesize pruebaGlobal;
+ (VariableStore *)sharedInstance
{
// the instance of this class is stored here
static VariableStore *myInstance = nil;
// check to see if an instance already exists
if (nil == myInstance) {
myInstance = [[[self class] alloc] init];
myInstance.pruebaGlobal = [[NSMutableArray alloc] initWithCapacity:100];
}
// return the instance of this class
return myInstance;
}
- (NSMutableArray*)pruebaGlobal{
return pruebaGlobal;
}
@end
//ViewController.m
NSMutableArray *p = [[VariableStore sharedInstance] pruebaGlobal];
p = [NSArray arrayWithObjects:
[NSMutableArray arrayWithObjects:@"Sí", @"No", nil, nil, nil],
[NSMutableArray arrayWithObjects:@"Súbita", @"Fluctuante", @"Progresiva", nil, nil],
nil];
NSLog(@"%d", [[[VariableStore sharedInstance] pruebaGlobal] count]);
最佳答案
抛开数组构造中对 nil
的滥用,您的代码根本不会向您要计数的数组添加任何内容。试试这个:
NSMutableArray *p = [[VariableStore sharedInstance] pruebaGlobal];
[p addObject:[NSMutableArray arrayWithObjects:@"Sí", @"No", [NSNull null], [NSNull null], nil]];
[p addObject:[NSMutableArray arrayWithObjects:@"Súbita", @"Fluctuante", @"Progresiva", [NSNull null], nil]];
对于您合成的属性,您将其指定为保留属性,然后为其显式定义 getter,而不是 setter。如果将属性声明为保留,则可以让编译器同时处理 getter 和 setter,或者自己编写两者,但不仅仅是其中之一。我的建议是,只需从头文件和实现文件中删除显式 getter:- (NSMutableArray*)pruebaGlobal
即可。
关于ios - 创建一个单例 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676914/