2016-10-13 4 views
0

У меня проблема с ошибкой о конфликтующих типах параметров при реализации NSUInteger vs NSInteger.Конфликтующие типы параметров при реализации NSUInteger vs NSInteger

Я видел много подобных проблем, и кажется, что самые частые происходят при определении указателя с символом *.

Целое - это примитивный тип, и я не использую указатели вообще, так где же проблема?

- (void) guessNumber: (NSInteger)number withRange:(NSInteger)range{ 


    dispatch_queue_t queue = dispatch_queue_create("com.alex.guessnumber.queue", DISPATCH_QUEUE_SERIAL); 


    dispatch_async(queue, ^{ 

     double startTime = CFAbsoluteTimeGetCurrent(); 

     NSInteger randomNumber; 
     NSInteger range; 

     while (randomNumber != number) { 
      randomNumber = arc4random_uniform(range); 
     } 
     NSLog(@"Student %@ guessed number %d in %f", self.name, randomNumber, CFAbsoluteTimeGetCurrent() - startTime); 
    }); 

} 
+0

Какая строка вызывает проблему? – Larme

ответ

1

arc4random_uniform возвращает uint32_t со значениями от 0 до 2^32 - 1. Вы пытаетесь сохранить это в NSInteger, который на 32-битных системах имеет диапазон от -2^31 до + 2^31 - 1. Это не сработает.

+0

Большое спасибо. Проблема решена. Я использовал: randomNumber = arc4random()% range –

Смежные вопросы