2012-12-19 30 views
2

時節省NSDecimalNumberEditViewController,在DisplayTableViewController值出現NaNNSDecimalNumber出現NaN的

請需要諮詢來解決這個問題。由於

我的代碼:

- (IBAction)saveChanges:(id)sender { 
    editGift.nameOfGift = nameTextField.text; 
    editGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text]; 

    AppDelegate *myApp = (AppDelegate *) [[UIApplication sharedApplication]delegate]; 
    [myApp saveContext]; 
    [self.delegate editGiftViewControllerDidSave:self]; 
} 

Please watch video explanation

輸入值:

currencyFormatter = [[NSNumberFormatter alloc]init]; 

[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

personGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text]; 
+0

什麼是輸入值,即什麼是'priceTextField.text'? – 2012-12-19 13:33:18

+0

輸入值:currencyFormatter = [[NSNumberFormatter alloc] init]; [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; personGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text]; – Astakhoff

+0

您的輸入值未格式化爲NSDecimalNumber,因此給予NaN。檢查輸入!記錄文本字段的值,然後將其放入NSDecimalNumber中並將其發佈;) –

回答

3

你的代碼是不清楚時,它適用的貨幣格式,但由於您的視頻很可能文本字段的值是「$ 6,000」。這不是一個數字(因此是「NaN」)。

+1

我相信Rob在這裏所說的是導致你的問題的原因。當您獲取包含'$' - 符號的文本值時。當用戶點擊保存時,從'priceTextField.text'中刪除$ -sign。就像一個人站起來一樣。你也可以檢查無效的數字。 like'1.2.3.4..00' – Christer

+0

非常感謝Rob and Christer,我如何從textfield中刪除$ -sign? – Astakhoff

+1

您已經有一個貨幣數字格式化程序方便。使用numberFromString:將文本轉換爲「NSNumber」。理想情況下,你應該使用'setGeneratesDecimalNumbers:',這樣你就可以得到一個十進制數。曾經有一個錯誤會阻止它像你想的那樣輕鬆工作,但是現在它已經修復了(這已經過去了幾年)。見http://stackoverflow.com/questions/317311/obtaining-an-nsdecimalnumber-from-a-locale-specific-string –

2

NSDecimalNumber文檔說:

此外位數,numericString可以包括初始的「+」或「 - 」;一個單一的「E」或「e」,以科學記數法表示數字的指數;和一個NSDecimalSeparator來從數字的整數部分中分割出小數部分。

您必須驗證在priceTextField.text字符串中包含唯一有效字符 - 在有效訂單。有一點特別要檢查的是,你是否有小數點或小數點的逗號,這取決於用戶的區域設置。因此,您可能要考慮使用:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString 
locale:(NSDictionary *)locale 
+0

非常感謝你JOM !!! – Astakhoff