您好我正在处理一个项目,我正在尝试将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;
}
答案 0 :(得分:11)
NSArray
(及其子类NSMutableArray
)仅支持对象,您无法为其添加原始值。
- (void)addObject:(id)anObject
正如您所看到的那样,它需要id
作为参数,这大致意味着任何对象。
所以你必须将整数包装在NSNumber
实例中,如下所示
[self.flipCardIndexes addObject:@(index)];
其中@(index)
[NSNumber numberWithInt:index]
为NSUInteger
。
然后,为了在从数组中提取它时将其转换回NSUInteger index = [self.flipCardIndexes[0] integerValue]; // 0 as example
,您必须按照以下方式“解包”它
{{1}}
答案 1 :(得分:2)
您只能向NSMutableArrays添加对象。 addObject接受id类型的对象,这意味着它将接受一个对象。
但是,NSIntegers和NSUIntegers不是对象。它们只是被定义为C样式变量。#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
正如您所看到的,它们只是基于typedef宏定义为int和long。
要将其添加到数组,首先需要将其转换为对象。 NSNumber是Objective C类,允许您存储任意类型的数量。要创建NSNumber,您需要使用numberWithInt方法,将变量作为参数传递。
NSNumber *number = [NSNumber numberWithInt:card];
现在您的变量已包装在对象中,您可以将其添加到数组中。
[self.flipCardIndexes addObject:number];
最后,如果要在将来检索元素,则必须删除该对象,然后将其转换回可以使用的int值。呼叫
NSNumber *number = [self.flipCardIndexes objectAtIndex:index];
其中index是您尝试检索的卡片的索引。接下来,您必须通过调用integerValue将此值转换为整数。
NSUInteger *value = [number integerValue];