static NSMutableDictionary 只能存储一个对象
static NSMutableDictionary can only store one object
我试过像这样创建一个静态 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;
}
我似乎只能将一个对象添加到字典中,但我相信我每次都会创建一个新对象,所以我对为什么我似乎只能在该字典中存储一个对象感到困惑。此外,它添加了第一个调用并且无法添加任何后续调用。
从给定的代码部分很难说出你发生了什么Textures
静态变量(可能是多线程问题,或者每个[=15=的事件相同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;
}
我试过像这样创建一个静态 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;
}
我似乎只能将一个对象添加到字典中,但我相信我每次都会创建一个新对象,所以我对为什么我似乎只能在该字典中存储一个对象感到困惑。此外,它添加了第一个调用并且无法添加任何后续调用。
从给定的代码部分很难说出你发生了什么Textures
静态变量(可能是多线程问题,或者每个[=15=的事件相同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;
}