Objective-C, без знака долго _Nullable - PullRequest
0 голосов
/ 28 октября 2019

Я получаю предупреждение, когда я компилирую свой код, и я не уверен, как его решить.

предупреждение: несовместимое целое число для преобразования указателя, инициализирующее «unsigned long *» с выражениемвведите 'unsigned long _Nullable'

NSDictionary *dict = @{@"foo": @420};
unsigned long *num = [[dict objectForKey:@"foo"] unsignedLongValue];
NSString *oct = [NSString stringWithFormat:@"%o", num];
NSLog(@"%04u", [oct intValue]); // 0644

Вывод правильный (я конвертирую число в восьмеричный формат), но я думаю, что мой код не соответствует паритету.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Здесь две ошибки -

1) unsigned long не объект, а примитив. Вам просто нужно удалить «*» перед num следующим образом -

unsigned long num = [[dict objectForKey:@"foo"] unsignedLongValue];

2) Формат неподписанного long -% lu, а не% o, как вы упомянули.

NSString *oct = [NSString stringWithFormat:@"%lu", num];

Итак, правильный код должен быть -

NSDictionary *dict = @{@"foo": @420};
unsigned long num = [[dict objectForKey:@"foo"] unsignedLongValue];
NSString *oct = [NSString stringWithFormat:@"%lu", num];
NSLog(@"%04u", [oct intValue]); // 0644
1 голос
/ 28 октября 2019

Я считаю, что это должно сработать (предупреждения исчезли):

unsigned long num = (unsigned long)[[dict objectForKey:@"foo"] unsignedLongValue];
NSString *oct = [NSString stringWithFormat:@"%lo", num];
...