2011-11-17 48 views
5

如何将CGFloat作为子类别UIImageView的属性存储/检索?我可以设置它的价值,但是当我检索它时,它是腐败的。 NSString属性正常工作。CGFloat as Property

.H

@property CGFloat myFloat; 

.M

[sender setMyFloat:someFloat]; 
[sender myFloat]; //<- corrupt? 

** * ** * ** * UPDATE * ** * ** * ****

我要感谢您对您的所有建议,他们是正确的。我的问题比我想象的更复杂。发件人是附加到UIImageview的UIPanGestureRecognizer,我遇到了问题。 UIPanGestureRecognizer调用选择器移动:(id)发件人,这是我的问题所在。

中移动:我能成功执行:

[[sender view] setMyString:@"test"]; 

和检索它带回

[[sender view] myString]; 

我不能然而设置或全部检索任何float属性,而不包括(ID)的自我。例如:

[[sender view] setMyString:@"test"]; //->works 

[[sender view] setMyFloat:1.0f]; //->does not work 

但这个工程:

[[[sender view]self] setMyFloat:1.0f]; //->works 

这是奇怪的一部分让我相信我是有我的浮铸造问题!我有几个NSString属性,他们返回就好,但CGFloats不会。有人可以向我解释为什么我用弦乐取得成功,但是这里的浮球会丢失吗?

+1

腐败如何显现? – Eimantas

+0

我在-.5和.5之间设置一个值,它返回为0.0或-2.000001 – user973984

+2

您需要为这两行代码提供上下文,否则我们所能做的只是猜测,而不是特别具有建设性。下面是一个猜测:你是否从这两个'sender'指针获得了_same_'UIImageView'? –

回答

3

解答#2:NSLog语法?

如何验证设置后的值?如果您使用的NSLog确保你有正确的格式代码为浮动(如NSLog(@"new float value = %f", myFloat)

原来的答案:错二传手(是有问题错字)

您所呼叫的错误setter方法的正确制定者。是:

`[sender setMyFloat:someFloat]` 

编辑:OP已经更新了他的问题,除去错字

+0

只是一个错字,对不起。我仍然需要答案。 – user973984

+0

这将是如果错字是在你的实际代码中的答案。如果还有其他问题,请发布更多代码。 .h文件和.m文件,如果你有一个自定义setter会有帮助。 – XJones

+0

你的权利,你提供了正确的答案发布的问题。谢谢。 – user973984

1

你应该在你的.m写@synthesize myFloat创造伊娃

的getter/setter
+0

这是很好的做法,但可选。吸气器/调节器可以手动定义。如果没有一个有效的getter/setter来定义属性,OP将无法编译。 – XJones

+0

你是对的,但我认为setter/getter没有手动执行 –

+0

的权利,但该应用程序不会编译(没有警告)的方式。如果应用程序在没有定义setter的情况下执行,则该应用程序会崩溃,因为该对象不会实现setter。取决于腐败的OP意味着什么。这里没有很多信息。 – XJones

2

试试这个:

.h: 

@interface SomeClass : UIImageView { 
    CGFloat _someFloat; 
} 

@property (nonatomic) CGFloat someFloat; 

@end 

.m: 

@implementation SomeClass 
@synthesize someFloat = _someFloat; 
... 
... 
... 
@end 
+3

你能解释为什么你认为这将解决OP的问题吗? –

+0

问题很模糊,他没有添加太多的代码。这个确切的代码适用于我(即使编译和尝试),所以如果他尝试使用这个代码,它不起作用,那么至少它会给我们更多的信息,至少是问题的根源(我觉得问题是伐木,但他没有回答) – DanZimm