“无符号”之前的预期表达式 - >目标C.

时间:2011-05-23 06:38:31

标签: objective-c

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中使用相同的逻辑。

2 个答案:

答案 0 :(得分:3)

您打算写for (VARIABLE in CONTAINER) {...} - 但您的示例使用的是if,而不是for

旁注:改变迭代过程中迭代的集合是错误的。

答案 1 :(得分:3)

我认为您打算使用for而不是if。另外,快速枚举语法
for (x in y)只能用于实现NSFastEnumeration协议的对象 - 通常为NSArray。看起来你正在使用C数组,所以这种语法无论如何都不会起作用。