新对象实例没有运行自定义初始化程序



我正在处理一个项目,该项目包含一个名为Survey的类的Singleton实例。在该单例实例中有一个名为"itemArray"的属性,它是一个NSMutableArray,包含任意数量的Item类实例。

My Items类包含多个NSInteger属性,但出于应用程序的目的,我需要使用值-1而不是默认值0初始化所有NSInteger。

现在,对于我的Survey类(带有Singleton实例的类),我在实现中使用以下方法来更改属性的默认值:

-(id)init {
    if (self = [super init]) {
        _thingy = -1;
        }
    return self;
}

这是有效的,但由于某种原因,相同的语法(具有不同的属性)不适用于我的Item实例的实例。值得一提的是,下面的代码块是Item的两个实例的创建,并将它们插入到itemArray中。我还尝试了Item*item1=[[Itemalloc]init;方法无效。

Item *item1;
[[[Survey sharedInstance]itemArray]insertObject:item1 atIndex:0];
Item *item2;
[[[Survey sharedInstance]itemArray]insertObject:item2 atIndex:1];
}

如果有任何帮助,我将不胜感激。

更新!!!!!我输入了以下条件:

if (![[Survey sharedInstance]itemArray]){
    NSLog(@"Test");
}

"测试"记录到控制台上,所以看起来itemArray没有初始化。不过,我不知道如何真正初始化它。当我尝试以下操作时:

  [[Survey sharedInstance]addressArray] = [[NSMutableArray alloc]init];

我收到一个错误,说"表达式不可赋值。"

调查.h:

#import <Foundation/Foundation.h>
@interface Survey : NSObject
+(instancetype)sharedInstance;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *emailAddress;
@property (nonatomic, assign) NSInteger trigger1;
@property (nonatomic, assign) NSInteger trigger2;
@property (nonatomic, assign) NSInteger trigger3;
@property (nonatomic, assign) NSInteger activeItem;
@property (nonatomic, strong) NSMutableArray *itemArray;
@end

测量.m

#import "Survey.h"
@implementation Survey

+ (instancetype)sharedInstance {
    static Survey *_instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[Survey alloc] init];
    });
    return _instance;
}
-(id)init {
    if (self = [super init]) {
        _storage = -1;
        }
    return self;
}
@end

而不是

 [[Survey sharedInstance]addressArray] = [[NSMutableArray alloc]init];

你需要使用

 [Survey sharedInstance].addressArray = [[NSMutableArray alloc]init];

[[Survey sharedInstance] setAddressArray:[[NSMutableArray alloc]init]];

您试图为getter方法的返回值分配一个值,这是不可能的,所以编译器说"表达式不可分配"。您需要使用setter方法或点表示法。

最新更新