Вам employers
метод класса ссылается _employers
, который предположительно, переменную экземпляра для вашего класса. Вы не можете сделать это. Более того, даже если вы сделали небрежное обходное решение, например глобальную переменную, у вас нет гарантий, что _employers
был создан, если метод класса employers
также не гарантирует, что вызывается sharedHelper
.
Таким образом, пара мыслей:
Вы действительно должны иметь некоторый класс свойство для employers
(я предполагаю, что вы сделали, но опустить его для краткости, но давайте включим его здесь, чтобы устранить неоднозначность):
@interface MyHelper : NSObject
@property (nonatomic, strong) NSMutableArray *employers;
@end
Я полагаю, что ваш метод init
бы инициализировать этот объект employers
- (id)init
{
self = [super init];
if (self) {
_employers = [[NSMutableArray alloc] init];
}
return self;
}
Ваш существующий метод sharedHelper
в порядке.
Если вы собираетесь иметь метод employers
класса, хотя, должен получить доступ к методу employers
экземпляра:
+ (NSMutableArray *)employers
{
return [[MyHelper sharedHelper] employers];
}
Проделав все это, ваш класс будет выглядеть следующим образом:
Это работает, но, говоря о том, что в качестве стиля я лично не рекомендовал бы метод класса, employers
, когда у вас есть метод getter для свойства с тем же именем. Кажется немного запутанным. Я бы иссечь этот метод employers
класса, и придерживаться стандартного метода геттера, который будет синтезированным для вас, в результате чего только:
@interface MyHelper : NSObject
@property (nonatomic, strong) NSMutableArray *employers;
+ (id)sharedHelper;
@end
@implementation MyHelper
+ (id)sharedHelper
{
static MyHelper *sharedHelper = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
sharedHelper = [[self alloc] init];
});
return sharedHelper;
}
- (id)init
{
self = [super init];
if (self) {
_employers = [[NSMutableArray alloc] init];
}
return self;
}
@end
А затем другой код, используя этот MyHelper
класс может просто сослаться на [[MyHelper sharedHelper] employers]
себя.
В вашем методе класса «работодатели» вы пытаетесь напрямую получить доступ к ivar '_employers'. Я не думаю, что вы можете сделать это из метода класса. Или они предполагают, что он делает '_employers' глобальным? – Rob
Вы правы. Я попытался как можно меньше изменить версию, содержащуюся в вопросе, поэтому я предполагаю, что _employers - это своего рода статическая или глобальная переменная. –