将id类型转换为int

时间:2014-03-08 21:03:47

标签: ios objective-c

我想这很简单,但我找不到解决这个问题的方法......

@property (strong, nonatomic) NSMutableArray *randomQuestionNumberArray;

我有一个像这样开始的方法

- (int)showQuestionMethod:(int)number;

在这个方法中,我有一个循环,我用NSMutableArray填充数字,然后将其洗牌。

//Creating random questions array
_randomQuestionNumberArray = [[NSMutableArray alloc] init];
for (int i = 0; i < numberOfQuestions; i++) {
    [_randomQuestionNumberArray addObject:[NSNumber numberWithInt:i]];
}

//Shuffling the array
NSUInteger count = [_randomQuestionNumberArray count];
for (NSUInteger i = 0; i < count; ++i) {
    // Select a random element between i and end of array to swap with.
    int nElements = count - i;
    int n = (arc4random() % nElements) + i;
    [_randomQuestionNumberArray exchangeObjectAtIndex:i withObjectAtIndex:n];
}

这很有效。让我们说它将数字改组为4,5,1,3,6,0,2。

现在在viewDidLoad中,我尝试使用showQuestionMethod的第一个值调用方法_randomQuestionNumberArray,在这种情况下应为4。

[self showQuestionMethod:[_randomQuestionNumberArray[0] intValue]];

问题是该方法在值为4时始终传递值0,但NSLog(@"first value is %@", _randomQuestionNumberArray[0])返回正确值4。

如何解决此问题并将id类型转换为int?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

[self showQuestionMethod:[(NSNumber)_randomQuestionNumberArray[0] intValue]];

答案 1 :(得分:0)

你确定,传递了错误的值吗?也许你的showQuestionMethod中的NSLog语句有问题。

我已经尝试过这段代码并且工作正常:

    - (IBAction)start:(id)sender {
NSMutableArray *_randomQuestionNumberArray;
int numberOfQuestions=5;


_randomQuestionNumberArray = [[NSMutableArray alloc] init];
for (int i = 0; i < numberOfQuestions; i++) {
    [_randomQuestionNumberArray addObject:[NSNumber numberWithInt:i]];
}

//shuffling the array
NSUInteger count = [_randomQuestionNumberArray count];
for (NSUInteger i = 0; i < count; ++i) {
    // Select a random element between i and end of array to swap with.
    int nElements = count - i;
    int n = (arc4random() % nElements) + i;
    [_randomQuestionNumberArray exchangeObjectAtIndex:i withObjectAtIndex:n];
}
NSLog(@"first value is %@", _randomQuestionNumberArray[0]);
[self showQuestionMethod:[_randomQuestionNumberArray[0] intValue]];  

}

- (void)showQuestionMethod:(int)number {
NSLog(@"number is %d", number);

}