2016-09-26 44 views
-2

我有一個NSNumber當我嘗試做基本算術失敗。Objective C算術失敗

NSNumber *contentExpirationInDays = [NSNumber numberWithInt: 1]; 

當我嘗試做一個基本的乘法轉換成秒這讓我瘋狂的數字:

NSTimeInterval contentExpirationInSecs = [contentExpirationInDays intValue] * 24 * 60 * 60; 

注:下一位是現在無關緊要的一些答案解釋:

當我在控制檯中運行以下命令時,我得到以下結果:

(lldb) po [contentExpirationInDays intValue] 
1 

(lldb) po [contentExpirationInDays intValue] * 2 
-148319360 

UPDATE

感謝關於PO VS P中的信息。我不知道細節...

因此,這裏是我遇到的現實問題:

NSNumber *contentExpirationInDays = [[NSNumber numberWithInt:1]; 
NSTimeInterval contentExpiration = ([contentExpirationInDays intValue] * 24 * 60 * 60); 
myObj.expirationDate = [[NSDate date] dateByAddingTimeInterval:contentExpiration]; 

obj.expirationDate通常具有多年在未來或多年過去,而不是結束比今天提前一天。

+3

'po'是 「打印對象」。使用'p'打印整數或其他標量值。 –

+0

您使用的是哪種版本的Xcode?在我的Xcode 8上工作得很好。 –

+0

如果我在第一行中除去了賦值('=')之後的額外'['''',這也適用於我。但是,日期計算有點幼稚。 –

回答

-1

NSNumber是表示數字的對象的基類,而不是像int或float這樣的原始標量值。

如果您需要您的號碼作爲對象,請改用NSDecimalNumber。否則,請將其作爲標量類型。

+1

他使用'-intValue'將其轉換爲標量。 –

+0

糟糕。對不起,我的壞人。教我讀太快。 – drekka

1

PO是要求調試器打印對象在由給定的指針所指定的地址的描述。正如馬丁·r表示,使用p,而不是隻是打印出標值:

p [contentExpirationInDays intValue] * 2