所以我有两个 View A和B。A是个人资料 View ,B是登录 View 。 A 在 ViewDidLoad 方法中使用
LoginViewController *lvc = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]]; //make new instance of LoginViewController
[self presentModalViewController:lvc animated:NO]; //present the LoginViewController
[lvc release];
在登录 View 中,如果登录成功,则移除该 View
[self dismissModalViewControllerAnimated:YES];
在登录 View 中,它会下载一些我想在配置文件 View 中显示的数据。我将如何将数据发送到配置文件 View 并将其显示在 xib 中。我相信配置文件 View 已经显示,但只是被隐藏了。
最佳答案
这是一个基本的“两个类(class)之间的交流”问题。有很多方法可以做到这一点,但这里有三种。我只为委托(delegate)编写了示例代码(因为我认为这可能是您情况下的最佳选择),但如果您需要通知或 KVO 的示例,请告诉我。
代表团 在 A 类中实现委托(delegate)或回调方法。委托(delegate)最适合小类层次结构。如果 A 类是唯一会加载 B 的类,而 A 是唯一关心 B 中发生的事情的类,那么委托(delegate)是移动数据的最简单方法。它易于实现,易于理解,并且类之间有明确的关系。
// Class A
- (void)displayLoginViewController {
LoginViewController *lvc = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]];
lvc.delegate = self;
[self presentModalViewController:lvc animated:NO]; //present the LoginViewController
[lvc release];
}
- (void)loginViewControllerWasSuccessfull:(LoginViewController *)loginViewController {
// Do whatever you need to do here
[self dismissModalViewControllerAnimated:YES];
}
在登录 View Controller 中,在标题中执行以下操作:
@property (assign) NSObject delegate; // declared assign so you don't have circular references
......这在实现中:
- (void)didLogin {
[self.delegate loginViewControllerWasSuccessfull:self];
}
通知 A 类将注册以监听登录通知。 B 类将发布登录通知。如果关心登录的类是分布式的,通知是最好的。也就是说,有许多类关心登录事件,它们可能不一定与执行登录的类有直接关系。
键值观察如果你不特别关心登录事件,KVO 是最好的,你关心数据的变化。您将拥有一些管理数据的类,可能是
NSManagedObject
如果您使用的是核心数据。 A 类将观察其感兴趣的任何属性的变化。您的 LoginViewController
完成下载数据后将更新该数据类。将通知 A 类数据已更改。无论您决定使用哪种解决方案,最终的选择都归结为问“A 级关心什么?”。 A类需要知道B类成功登录吗?使用委托(delegate)。 A 类是否需要知道某个地方,某个类(class)已登录?使用通知。 A类不关心登录,它只需要知道数据是否发生了变化?使用 KVO。
关于iphone - 重新加载查看 iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228681/