NSUInteger index = [self.objects indexOfObject:obj];
if (index == NSNotFound) {
// Success! Note: NSNotFound internally uses NSIntegerMax
}
if (index == NSUIntegerMax) {
// Fails!
}
Run Code Online (Sandbox Code Playgroud)
为什么?我想由于indexOfObject而得到一个无符号值.所以,当然,我假设如果找不到该对象,它将返回NSUIntegerMax而不是NSIntegerMax.这是一个错误,还是对这种行为有合理的解释.
我在XCode中为我的iOS项目打开了“签名比较”(又名-Wsign-compare)警告(令人惊讶的是,默认情况下它处于关闭状态)。之后,出现了许多这样的警告:
/Users/michalciuba/projects/GlobeMobile/Classes/ACMailController.m:86:19: Comparison of integers of different signs: 'NSInteger' (aka 'long') and 'NSUInteger' (aka 'unsigned long')
Run Code Online (Sandbox Code Playgroud)
它们通常通过比较造成row的财产NSIndexPath是NSInteger由“计数”的方法的返回值NSArray,如下所示:
if(indexPath.row < [self.myDataArray count])
Run Code Online (Sandbox Code Playgroud)
可以通过强制转换来简单地解决警告:
if(indexPath.row < (NSInteger)[self.myDataArray count])
Run Code Online (Sandbox Code Playgroud)
但是,如果要比较每个地方的值,则必须这样做。他们正在数十个地方进行比较。我想知道是否有更好,更聪明的方法来解决这个问题?我不想关闭此警告,因为它可能有助于防止出现无符号整数下溢之类的问题。
我试图将类型为"long long"的变量赋值给NSUInteger类型,这样做的正确方法是什么?
我的代码行:
expectedSize = response.expectedContentLength > 0 ? response.expectedContentLength : 0;
Run Code Online (Sandbox Code Playgroud)
其中expectedSizeNSUInteger类型,返回类型为response.expectedContentLength' long long'.变量response属于类型NSURLResponse.
显示的编译错误是:
语义问题:隐式转换失去整数精度:'long long'到'NSUInteger'(又名'unsigned int')
我需要进行编码和解码类型的财产NSUInteger有NSCoder.
使用方法NSCoder::encodeInteger:forKey:和NSCoder::decodeIntegerForKey:方法是否安全?
我想到的另一种方法是将无符号整数包装到NSNumber第一位.但这意味着更多的代码,我不喜欢它.
为什么NSUInteger的值为2 ^ 32 - 1而不是2 ^ 32?这个事实与纳米值的需要之间是否存在关系?这太令人困惑了.
你好我正在研究一个项目,我正在尝试将NSUInteger添加到NSMutableArray.我是Objective-C和C的新手.当我运行应用程序时,NSLog显示为null.
我很感激任何人都能提供的帮助.
这是我的代码
-(NSMutableArray *)flipCardAtIndex:(NSUInteger)index
{
Card *card = [self cardAtIndex:index];
[self.flipCardIndexes addObject:index];
if(!card.isUnplayable)
{
if(!card.isFaceUp)
{
for(Card *otherCard in self.cards)
{
if(otherCard.isFaceUp && !otherCard.isUnplayable)
{
int matchScore = [card match:@[otherCard]];
if(matchScore)
{
otherCard.unplayable = YES;
card.unplayable = YES;
self.score += matchScore * MATCH_BONUS;
}
else
{
otherCard.faceUp = NO;
self.score -=MISMATCH_PENALTY;
}
break;
}
}
self.score -=FLIP_COST;
}
card.faceUp = !card.isFaceUp;
}
NSLog(@"%@",self.flipCardIndexes[self.flipCardIndexes.count-1]);
return self.flipCardIndexes;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将NSUInteger转换为字符串,以便我可以打印消息.从搜索,似乎我需要使用stringWithFormat,但我收到一个错误,ARC不允许隐式转换.
这是有问题的一行:
NSString *text = [[NSString stringWithFormat: (@"%li", NSUInteger)];
Run Code Online (Sandbox Code Playgroud)
我试过在没有帮助的情况下将格式说明符更改为%lu.
谢谢.
我写了一个使用myarray的方法,在同一个类中定义.当我使用count时它总是返回0.当我使用:
printf("%d", [myarray count]);
Run Code Online (Sandbox Code Playgroud)
编译说:
Format '%d' expetcs type 'int', but argument 2 has type 'NSUInteger'
Run Code Online (Sandbox Code Playgroud)
为什么?
NSUInteger wordInt = sentence.length;
Run Code Online (Sandbox Code Playgroud)
我想像这样添加1 - > wordInt = wordInt + 1 ;
但它不起作用.我不知道....
请!!
惊喜!
我有一个像这样的变量,
NSInteger index = 0;
Run Code Online (Sandbox Code Playgroud)
我正在将它与其中一个子视图count(返回NSUInteger)进行比较,
if((index-1) <= [[currentmonth subviews] count])
{
NSLog(@"true");
}
else
{
NSLog(@"false");
}
Run Code Online (Sandbox Code Playgroud)
这总是假的.
但如果我这样做,
if ((index-1) <= 42) {
NSLog(@"true");
} else {
NSLog(@"false");
}
Run Code Online (Sandbox Code Playgroud)
这总是给人的.
我觉得,这是因为我们无法NSInteger与NSUInteger正确比较?
当我有一个基于这种逻辑的工作解决方案时,我发现了这个问题.但它根本不是真的.
nsuinteger ×10
objective-c ×7
ios ×4
nsinteger ×4
cocoa ×2
arrays ×1
clang ×1
comparison ×1
foundation ×1
ios5 ×1
iphone ×1
long-integer ×1
nan ×1
nscoder ×1
nsstring ×1
printf ×1
xcode4.2 ×1