2015-09-09 59 views
-1

是否有任何方法用Objective-C减去两个或更多NSUInteger值?如何减去两个NSUInteger变量?

这是我的代码

__block NSUInteger *removedElementsCount = 0; 
__block BOOL lastIsSuperElement = NO; 
// Get the elements not collapsed 
[_elements enumerateObjectsUsingBlock:^(id __nonnull obj, NSUInteger idx, BOOL * __nonnull stop) { 
    if (_isHidingSubElementsBlock(obj)){ 
     //_collapseSubCellsAtIndexPathBlock(idx+_elementsOffset); 
     [elementToRemove addObject:(Task *)obj]; 
     lastIsSuperElement = YES; 
     [indexPathToRemove addObject:[NSIndexPath indexPathForRow:(idx-removedElementsCount) inSection:0]]; 
     removedElementsCount = 0; 
    } else if (lastIsSuperElement){ 
     removedElementsCount++; 
     lastIsSuperElement = NO; 
    } 
}]; 

当我尝试创建一个新的NSIndexPath与IDX-removedElementsCount,我得到以下错误:

HTReorderTableCells.m:231:75: Invalid operands to binary expression ('NSUInteger' (aka 'unsigned int') and 'NSUInteger *' (aka 'unsigned int *')) 

我一直在寻求一个解决方案,但我避风港没有发现任何东西。

+1

你的意思是减号b吗? – WangYudong

+0

是的,但与NSUInteger – EnriMR

+1

是的,有一种方法。你曾经尝试失败过?请显示一些代码。 –

回答

5

使用NSInteger作为您的解决方案。

NSUInteger value1 = 5; 
NSUInteger value2 = 3; 
NSInteger subs = value1 - value2; 

在代码中修复的removedElementsCount声明(除去*)

+2

为什么'subs'是'NSInteger'而不是'NSUInteger'?解决方案不是使用'NSInteger'。解决方案是修复'removedElementsCount'的声明。 – rmaddy

+1

这是NSInteger,因为(value1 - value2)可能是负数。在他的问题中,“如何减去两个NSUInteger变量?”所以这是答案。无论如何,我编辑了我的答案。 –

-2

removedElementsCount不是NSUInteger,这是一个NSUInteger*(指针为整数)。

尝试更改表达式以在减法之前解引用指针。

idx - (*removedElementsCount) 
+1

它会导致'BAD_ACCESS'。因为'removedElementsCount'中有'NULL'。 –

+1

不,正确的解决方案是使'removedElementsCount'成为'NSUInteger'而不是'NSUInteger *'。 – rmaddy