AppDelegate.h中的属性:@property (retain, nonatomic) NSString *bmiShared;
。
(它在我的AppDelegate.m
中合成。)
我在两个View Controller头文件中都导入了AppDelegate.h
。我在每个标题中都有AppDelegate *appDelegate
。
在两个实施文件(ViewController.m
和TipsViewController.m
)中,我有:
appDelegate.bmiShared = bmiView.text;
appDelegate = [[UIApplication sharedApplication] delegate];
我不知道在传递数据时我做错了什么。我希望floatValue
的{{1}}可以在我的bmiView.text
中使用,这样如果TipsViewController
的{{1}}是一定金额,它就会显示我floatValue
中的正确信息。如果有任何不同,我正在使用故事板。
答案 0 :(得分:0)
根据您提供的代码,一种可能性是您在为appDelegate.bmiShared
分配了值(即它为零)之前尝试为appDelegate
分配值。尝试交换这两行,以便
self.appDelegate = [[UIApplication sharedApplication] delegate];
self.appDelegate.bmiShared = bmiView.text;
还有许多其他问题可能会出错,但如果没有看到所有代码,这似乎是最可能的解释。
答案 1 :(得分:0)
如果要跨视图控制器传递数据,则应考虑使用单例。
Singleton.h
@property (nonatomic, strong) NSString *bmiShared;
+(Singleton *)sharedStore;
#import "Singleton.h"
@implementation Singleton
+(Singleton *)sharedStore
{
static Singleton *sharedStore = nil;
if (!sharedStore) {
sharedStore = [[super allocWithZone:nil] init];
}
return sharedStore;
}
+(id)allocWithZone:(NSZone *)zone
{
return [self sharedStore];
}
-(id)init
{
self = [super init];
if (self) {
_bmiShared = [[NSString alloc] init];
}
return self;
}
@end
那应该有用。如果要设置字符串,请导入单例,alloc / init,然后设置bmiShared属性,就像设置任何其他属性一样。对要查看的视图上的访问者执行相同的操作。
答案 2 :(得分:0)
这是今天的第二个问题,你已经就同一主题提出过要求,而且你所做的大部分工作都不对。要在控制器之间传递数据,不应使用应用程序委托,也不应使用单例。你需要做的是回到基础并尝试理解你在做什么。在两个控制器之间传递数据是一个简单的三步过程:
让大多数新手搞砸的步骤是#2。你不能只为init分配一个“传递给”控制器的实例,你需要获得对你创建的实例的引用,通常是在xib或storyboard中。究竟如何做到这一点取决于这两个控制器如何相互关联。是否创建了另一个的实例然后推送或呈现它?这是“传递给”在xib,故事板或代码中创建的控制器吗?控制器是否嵌入在导航控制器或标签栏控制器中?您是在代码中移动到第二个控制器还是直接使用segues?这些是您需要考虑的问题,并了解如何回答,因此您可以使用任何设置来正确处理。
如果您能解释一下控制器的设置(两者如何相互关联,以及它们的制作方式),我可以为您指出第2步的更具体的答案。
编辑后:
使用segue在视图之间移动时,传递数据的位置在prepareForSegue中。 TipsViewController将是segue.destinationViewController,所以你这样做:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"segueName"]) {
TipsViewController *tipsVC = [segue destinationViewController];
tipsVC.bmi = self.bmi;
}
}
此示例假设您在TipsViewController中创建了一个名为bmi的属性,并且您在ViewController中也有一个属性。 Apple的“适用于iOS的View Controller编程指南”中对此进行了介绍 - 您应该对其进行研究。