m_cAppIdMap是字典的对象。 我想遍历字典并删除值并删除值pEvent.wTimerId是一个无符号的短整数,它作为键存储在字典中。
if(unsigned short* key in m_cAppIdMap) //error:Expected expression before 'unsigned'
{
(void)[self findAndRemoveEvent:pEvent];
(void)CFDictionaryRemoveValue(m_cAppIdMap,&wTimerId);
free(pEvent);
bReturn = YES;
}
当我尝试迭代循环时,我收到错误。
EDITED
-(BOOL)KillTimer:(unsigned short)wTimerId
{
stRs232Timer* pEvent;
BOOL bReturn=FALSE;
theLock = [[NSLock alloc]init];
if ([theLock tryLock]) {
// if ( m_cAppIdMap.Lookup(wTimerId,pEvent) )
// {
// (void)findAndRemoveEvent(pEvent); // remove from event queue
// (void)m_cAppIdMap.RemoveKey(wTimerId); // remove from app map
for(wTimerId in m_cAppIdMap)
{
(void)[self findAndRemoveEvent:pEvent];
(void)CFDictionaryRemoveValue(m_cAppIdMap,&wTimerId);
free(pEvent);
bReturn = YES;
}
[theLock unlock];
}
return bReturn;
}
我在此代码中遇到错误'选择器元素没有有效的对象类型'。我需要在m_cAppIdMap中搜索wTimerId(key)
。这是我正在做的是正确的.for循环上面的注释行是cpp中相同代码的实现。我不能在Objective C中使用相同的逻辑。
答案 0 :(得分:3)
您打算写for (VARIABLE in CONTAINER) {...}
- 但您的示例使用的是if
,而不是for
。
旁注:改变迭代过程中迭代的集合是错误的。
答案 1 :(得分:3)
我认为您打算使用for
而不是if
。另外,快速枚举语法
for (x in y)
只能用于实现NSFastEnumeration
协议的对象 - 通常为NSArray
。看起来你正在使用C数组,所以这种语法无论如何都不会起作用。