2010-03-23 27 views
0

我知道NSNumber是不可變的,但我仍然需要在我的應用程序中進行更改。我使用它是因爲它是一個對象,因此可以與@property一起使用(如果可以的話,我會在心跳中使用float或CGFloat,但很遺憾,我不能)。通過分配新的NSNumber來更改NSNumber值?

有什麼辦法可以覆蓋舊的NSNumber實例嗎?我試試這個:

NSNumber *zero = [[NSNumber alloc] initWithFloat:0.0]; 
myNSNumber = zero 

但是這並不改變這個值。這是我的代碼的簡化版本,因爲我正在改變根視圖控制器的參數(我知道,不是MVC友好的)。不過,價值的變化應該是相同的任務,對吧?我應該先釋放myNSNumber嗎?我應該爲myNSNumber設置@property?

謝謝!

+3

您可以在'@ property'聲明中使用原始類型。例如'@property(nonatomic,assign)float foo;' – 2010-03-23 21:37:41

+0

謝謝Ben。這樣做後,我似乎無法更改不同對象的參數值(我使用@property(nonatomic,assign): ((myViewController *)self.parentViewController).otherViewController.value = 1.0;?!?​​ 不應該在該工作 再次感謝本 – 2010-03-23 21:51:34

回答

1

您可以通過方便的方法,如numberWithDouble:numberWithInteger:得到的NSNumber的自動釋放的實例。不需要調用alloc/init,特別是如果您使用retain說明符分配屬性(這些會自動保留/分配)。

+0

將這項工作重新分配NSNumbers 另外,我張貼在奔評論,我似乎無法即使使用更改數值@property (非原子,分配)與浮游物: ((myViewController *)self.parentViewController).otherViewController.value = 1.0; 似乎不適用於任何想法嗎? – 2010-03-23 22:15:21

+0

是的,它可以用於分配/重新分配'NSNumber'屬性。你能否在你最近的例子中確認'value'屬性是一個值類型(如CGFloat,double等)和'assign'說明符?你是在@ @綜合所有這些屬性還是自己編寫訪問器和增強器? – warrenm 2010-03-23 22:31:30

+0

value屬性是一個浮點數,我使用@property(readwrite,assign)說明符。我正在綜合這些屬性。這是我剛纔玩的: ((myViewController *)self.parentViewController).otherViewController.value = 1.0; assert(((myViewController *)self.parentViewController).otherViewController.value == 1.0); 該聲明失敗。我真的很困惑爲什麼會這樣。 (另外,如何激活那些光滑的小突出顯示的代碼塊?) 非常感謝您的幫助! – 2010-03-24 00:54:45

0

((myViewController*)self.parentViewController).otherViewController.value

心理調試告訴我,在這個鏈性質的對象之一是零。我的錢在parentViewController上,因爲我經常忘記設置父屬性。