HowTo для новичка: управление валютой в приложении для iPhone - PullRequest
2 голосов
/ 09 января 2009

Я создаю приложение, которое должно управлять типом данных money.

Я новичок в Obj-c, поэтому не вижу яркости в использовании NSDecimalNumber.

Например, в моем модульном тесте я делаю это:

@interface SamplePerson : NSObject {
    NSString *name;
    NSDate *birthDate;
    NSInteger size;
    NSNumber *phone;
    NSDecimal balance;
    BOOL *isOk;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSDate *birthDate;
@property (nonatomic) NSInteger size;
@property (nonatomic, retain) NSNumber *phone;
@property (nonatomic) NSDecimal balance;
@property (nonatomic) BOOL *isOk;
--    
o.balance = [NSDecimalNumber decimalNumberWithDecimal: [[NSNumber numberWithLong: 12.5] decimalValue]];

Но получите предупреждение:

предупреждение: передача аргумента 1 'save:' из отдельного типа Objective-C

В общем, я решаю эту проблему сложнее, чем ожидалось. Я мог бы взломать с помощью целых чисел, но я никогда не делал этого в свои 10+ лет программирования на Foxpro, Delphi, .NET, Python ... никогда не было проблем с выполнением такого рода работы.

В любом случае, я хочу знать, как это сделать. Я читал в Интернете, но нашел только тот же код, что и выше, и информацию вроде «Использовать NSDecimalNumber или убить!».

Я хочу знать, как:

  • Задание простых значений, например 12,5
  • Простая математика
  • Как хранить и загружать из sqlite.

Спасибо.

(кстати: существует библиотека или утилита, которые решают эту проблему? Это похоже на обычную головную боль, верно?)

Ответы [ 2 ]

3 голосов
/ 09 января 2009

Причина, по которой вы получаете это предупреждение, заключается в том, что вы объявили баланс как примитив NSDecimal вместо NSDecimalNumber *. Посмотрите на этот вопрос , почему вы должны использовать NSDecimalNumber.

1 голос
/ 09 января 2009

также 12,5 не длинная, поэтому вы не можете использовать

[NSNumber numberWithLong: 12.5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...