static NSMutableDictionary只能存储一个对象

时间:2017-06-19 18:51:21

标签: ios objective-c nsmutabledictionary

我尝试创建一个像这样的静态NSMutableDictionary

static NSMutableDictionary* Textures;

+(Texture*) loadTexture: (NSString*) name path: (NSString*) path{
    CGImageRef imageReference = [[UIImage imageNamed:path] CGImage];

    GLKTextureInfo* textureInfo = [GLKTextureLoader textureWithCGImage:imageReference options:nil error:NULL];

    Texture* texture = [[Texture alloc] init:textureInfo];

    if(!Textures) Textures = [[NSMutableDictionary alloc] init];

    [Textures setObject:texture forKey:name];

    return texture;
}

似乎我只能在字典中添加一个对象,但我相信每次都会创建一个新对象,所以我被困在为什么看起来我只能在这个字典中存储一个对象。此外,它添加了第一个,并且无法添加任何后续调用。

1 个答案:

答案 0 :(得分:3)

从代码的给定部分开始,很难说你发生了什么Textures静态变量(它可能是多线程问题,或者每次运行时事件的name值相同),所以我可以建议您使用以下方法来解决问题:

+ (NSMutableDictionary *) textures {
    static NSMutableDictionary *result = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        result = [NSMutableDictionary new];
    });
    return result;
}

+ (Texture*) loadTexture: (NSString*) name path: (NSString*) path {
    CGImageRef imageReference = [[UIImage imageNamed:path] CGImage];

    GLKTextureInfo* textureInfo = [GLKTextureLoader textureWithCGImage:imageReference options:nil error:NULL];

    Texture* texture = [[Texture alloc] init:textureInfo];

    self.textures[name] = texture;

    return texture;
}