Chen Li Yong Chen Li Yong - 14 days ago 10
iOS Question

How to initialize Objective C class variable in init?

In the

@interface
, I have this declaration:

@interface myClass {
NSDictionary * myData;
}

@property (nonatomic, assign) NSDictionary * data;
+ (id) initWithData:(NSDictionary *)data;

@end


In the
@implementation
, I have this code:

@implementation

@synthesize data;

+ (id) initWithData:(NSDictionary *)freshData {
self = [super init];
if (self) {
self->data = freshData;
}
return self;
}

@end


But I got error
Incomplete definition of type 'struct objc_class
on
self->data
.

If I change it into
self.data
, I got error
Member reference type 'struct objc_class *' is a pointer; did you mean to use '->'?


If I remove the
self
, I got error `Instance variable 'data' accessed in class method.'

But if I change the method type from
+
(class method) to
-
(instance method), I cannot access the init.

And I cannot fix this error by change the assignment from
data
to
myData
either.

How should I make a constructor?

The link that I have learned from (but not helping) are:


Answer

You can do it like this also

+ (id) initWithData:(NSDictionary *)freshData {
    return [[self alloc]initWithData:freshData];
}
- (instancetype) initWithData:(NSDictionary *)freshData {

    NSParameterAssert(freshData != nil);

    self = [super init];

    if (self) {
        self.data = freshData;
    }

    return self;
}