2010-03-23 22 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上,因为我经常忘记设置父属性。