Что такое __AVAILABILITY_INTERNAL__IPHONE_2, NS_AVAILABLE?Попытка использовать NSNumberFormatter, возвращает (null) - PullRequest
0 голосов
/ 28 октября 2010

У меня возникли некоторые проблемы с правильной работой NSNumberFormatter.

Я компилирую в iOS4 с Three20 Framework.

Все селекторы NSNumberFormatter требуют что-то под названием NS_AVAILABLE в качестве второго параметра в селекторе:

[numberFormatter setCurrencyGroupingSeparator:(NSString *)string __AVAILABILITY_INTERNAL__IPHONE_2:(int)_0];

Я не уверен, что я должен делать со вторым параметром. Я пробовал:

[numberFormatter setCurrencyGroupingSeparator:@"," __AVAILABILITY_INTERNAL__IPHONE_2:2]; // Warning: NSNumberFormatter' may not respond to '-setCurrencyGroupingSeparator:__AVAILABILITY_INTERNAL__IPHONE_2:
[numberFormatter setCurrencyGroupingSeparator:@"," __AVAILABILITY_INTERNAL__IPHONE_2:2_0]; //Error: invalid suffix "_0" on integer constant

и еще несколько итераций этого.

Если я не укажу __AVAILABLE_INTERNAL__IPHONE_2, он не выдаст предупреждение и скомпилирует нормально, но текст селектора черный, а не темно-фиолетовый в Xcode, как если бы он не распознавался.

Вот полный фрагмент кода:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setCurrencyGroupingSeparator:@","];
[numberFormatter setUsesGroupingSeparator:YES];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
numberString = [NSString stringWithFormat: @"$%@",[numberFormatter stringFromNumber:myNsNumber]]; // myNsNumber is an NSNumber with a value of 10000000
NSLog(@"numberString: %@",numberString); // numberString: (null) | instead of numberString: $10,000,000

Я гуглил _AVAILABILITY_INTERNAL__IPHONE_2 и NS_AVAILABLE без удачи.

Поиск на сайте developer.apple.com дает мне только отличия API iOS 4.0.

Это проблема с Three20? Кто-нибудь знает, что здесь происходит или что такое NS_AVAILABLE?

1 Ответ

1 голос
/ 28 октября 2010

Забудьте обо всем, что у вас есть в этом посте. Информация о доступности позволяет узнать, в какой SDK включены методы.

Это работает NSNumberFormatter код.

NSNumber *number = [UINumber numberWithInt:42];
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setFormatterBehavior:NSNumberFormatterBehavior10_4];
[nf setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *string = [nf stringFromNumber:number];
[nf release];

Если у вас нулевая строка, то это либо потому, что ваш NSNumber равен нулю, либо NaN, либо ваш формат испорчен.

...