【问题标题】:Why my reference to singleton is nil?为什么我对单例的引用为零?
【发布时间】:2017-10-16 16:40:09
【问题描述】:

我有这个代码:

在我的 .h 文件中

@property (nonatomic,strong) NSMutableDictionary *allInformation;

以米为单位。文件

我有这个代码...

+ (instancetype)sharedManager {
    static id sharedData = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedData = [[[self class] alloc] init];
    });
    return sharedData;
}

-(void)buildJsonRequest{
    self.allInformation = [[NSMutableDictionary alloc] init];
            [OpenWeatherAPI fetchData:WEATHER_DATA
                           forZipCode:[valueSelected objectForKey:@"ZipCode"]
                           andCountry:countrySelected
                           usingUnits:API_METRIC_UNITS
                          withHandler:^(NSDictionary* weatherData){

                          [[[JsonParser sharedManager]allInformation] setObject:weatherData forKey:@"data"];

            }];

            [OpenWeatherAPI fetchData:FORECAST
                           forZipCode:[valueSelected objectForKey:@"ZipCode"]
                           andCountry:countrySelected
                           usingUnits:API_METRIC_UNITS
                          withHandler:^(NSDictionary* forecastData){

                          [[[JsonParser sharedManager]allInformation] forecastData forKey:@"data2"];

            }];
        }

当我尝试检索我的单身信息时,总是为零

另一个类...

- (instancetype)init
{
    self = [super init];
    if (self) {
        NSDictionary *dataJson = [[JsonParser sharedManager]allInformation];
   }
    return self;
}

为什么 dataJson 总是为零??

我希望有一个 NSMutableDictionary 单例来保存不同的请求,例如:

  • dataJson[0] Json 响应(NSDictionary)
  • dataJson[1] 另一个 Json 响应 (NSDictionary)

【问题讨论】:

  • 是 [JsonParser sharedManager] nil 还是 [[JsonParser sharedManager]allInformation] nil ?发布您的 sharedManager 方法。
  • dataJson 为空。当我尝试从单例获取信息时
  • 所有信息都初始化了吗?
  • 是的,如果我使用此代码 [[JsonParser sharedManager] setAllInformation:[forecastData mutableCopy]];工作正常但是当我尝试保存另一个 Json 请求时覆盖最后一个。
  • nsdictionary 会覆盖该值,即使您多次调用它(如果键相同)。

标签: ios objective-c json singleton


【解决方案1】:

终于找到了解决办法=)

它为零,因为我从未正确初始化该属性

这就是解决办法

感谢您的宝贵时间和帮助!

我创建了这个额外的方法来正确初始化:

-(instancetype)init {

    if ((self = [super init])) {
        self.allInformation = [NSMutableDictionary new];
    }
    return self;
}

现在我的单身人士已经存储了值

【讨论】:

  • 你说 allInformation 是一个字典,但是为什么你在这里把它初始化为数组呢?
  • 哎呀抱歉是我的错让我改一下
  • @Fabio 从你的单例实现中移除[self class]。它会“工作”,直到您拥有多个子类。
猜你喜欢
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2015-04-28
  • 2020-02-03
  • 2023-03-14
  • 2017-06-14
  • 2011-06-13
相关资源
最近更新 更多