Я не понимаю, что я делаю не так.У меня есть словарь как свойство одноэлементного класса:
@interface CABResourceManager : NSObject
{
....
NSMutableDictionary* soundMap;
}
@property (retain) NSMutableDictionary *soundMap;
Затем я добавляю объект в этот словарь одним методом класса:
+ (void)loadSoundFromInfo:(ABSoundInfo)sound
{
static unsigned int currentSoundID = 0;
CABSound* newSound = [[CABSound alloc] initWithInfo:(ABSoundInfo)sound soundID:++currentSoundID];
[[CABResourceManager sharedResMgr].soundMap setObject:newSound forKey:sound.name];
}
И пытаюсь получить его в другомметод:
+ (ALuint)playSoundByName:(NSString*)name
{
NSMutableDictionary* map = [CABResourceManager sharedResMgr].soundMap;
CABSound *sound = [map objectForKey:name]; // here comes the exception
, и приложение закрывается в этом случае при исключении.
2011-03-27 20:46:53.943 Book3HD-EN[5485:207] *** -[NSCFSet objectForKey:]: unrecognized selector sent to instance 0x226950
2011-03-27 20:46:53.945 Book3HD-EN[5485:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException'
Я полагаю, что это может иметь что-то с управлением памятью, но здесь мне кажется, что объект CABSoundсохраняется в словаре с помощью setObject (), в настоящее время его не следует выпускать.