在多个视图控制器之间传递浮点数
Posted
技术标签:
【中文标题】在多个视图控制器之间传递浮点数【英文标题】:Passing a float between multiple viewcontrollers 【发布时间】:2010-09-21 09:44:49 【问题描述】:我使用标签在两个视图控制器之间切换。
如何在第二个视图控制器中检索一个浮点数,这是在第一个视图控制器中启动的?我应该做某种全局变量吗?我在哪里以及如何做到这一点?
谢谢大家:)
【问题讨论】:
在我的 firstviewcontroller.h 文件中,我有 IBOutlet UILabel *greeti float RWI;浮升; @property(非原子,保留); IBOutlet UILabel *问候; -(IBAction)updatePrefs:(id)发件人; @property(nonatomic) 浮动 *RWI; @property(nonatomic) float *Liters; 【参考方案1】:全局变量是不可取的,我强烈建议使用一些消息传递模式,s.th。 SecondViewController 和 FirstViewController 可以在它们更改对方感兴趣的任何内容时进行同步。 乍一看,我只发现这条指南http://www.informit.com/articles/article.aspx?p=1398611 讲述了可可中的消息传递模式,我猜应该已经有 iPhone 的示例实现了。
【讨论】:
【参考方案2】:您可以将该变量设置为您的应用委托的属性,可以从您的应用中的任何位置访问它。如果出于某种原因您不希望这样做,您可以创建一个“帮助”单例来保留这些变量并再次使它们成为属性。
【讨论】:
好的,我会进入我的应用程序 delegate.h float RWI; @property(非原子,保留)浮动 *RWI;` ?以及如何从我的视图控制器中调用它? 不能保留浮点数,否则可以。在您的视图控制器中,执行:float RWI = [[[UIApplication sharedApplication] delegate] RWI];
对不起,我对这个真的很陌生..我如何从我的 firstviewcontroller 发送,然后如何在我的 secondviewcontroller 中检索它?
我之前评论中的代码行是“接收”代码。它调用应用程序委托的新属性的 getter 并返回其值。要“发送”,您可以在第一个视图控制器中将其设置为:[[[UIApplication sharedApplication] delegate] setRWI:foobar];
,其中 foobar 包含您要设置的值。
为了进一步解释这一点:您实际上正在做的是调用方法来设置和检索已为您的属性自动生成的实例变量的值 - 这就是 @synthesize 的用途。因此,您并没有真正访问变量本身。其他东西(UIApplication sharedApplication...)正在调用一个类方法来检索指向您的应用程序委托的指针,因此您可以首先向它发送 getter 和 setter 调用。【参考方案3】:
为此使用 AppDelegate
+(BOOL)SetData:(float)Value
GlobalValue=Value;
+(float)ReturnData
return GlobalValue;
这样称呼
[YourAppDelegate ReturnData];
【讨论】:
不确定是否应该将其添加为新问题?好的,我尝试使用 NSUserDefaults。首先我尝试了一个字符串并且它有效,现在我正在努力对浮动做同样的事情。在我的 firstviewcontroller.hIBOutlet UITextField *nameField; IBOutlet UILabel *greeting; float RWI; float Liters; @property(nonatomic) float *Liters;
@property(nonatomic, retain); IBOutlet UILabel *问候; @property(nonatomic, retain) IBOutlet UITextField *nameField; -(IBAction)updatePrefs:(id)发件人; @property(nonatomic) 浮动 *RWI; `
在.m文件中`float RWI; //@synthesize RWI;这应该在这里吗? @synthesize 升; @synthesize 问候语; -(IBAction) updatePrefs:(id) sender NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setObject:nameField.text forKey:@"greeting"]; [首选 setFloat:20 forKey:@"Liters"]; [首选同步];对于 secondviewcontroller.h IBOutlet UILabel *greeting;浮动*升; @property(nonatomic, retain) IBOutlet UILabel *greeting; @end
In .m @implementation secondviewcontroller @synthesize 问候语; @synthesize 升; - (void)viewDidLoad [超级 viewDidLoad]; NSString *prefs = [[NSUserDefaults standardUserDefaults] objectForKey:@"greeting"]; float Liters = [prefs floatForKey:@"Liters"];问候语.文本=首选项; 任何帮助,将不胜感激! :D
这应该是一个新问题...不可能有人会在 cmets 线程中回答这个问题。以上是关于在多个视图控制器之间传递浮点数的主要内容,如果未能解决你的问题,请参考以下文章