非常基本的目标-c问题 - 如何让不同的观点共享信息?

wya*_*ger 1 iphone view objective-c

所以,基本上,我有四个不同的视图,通过屏幕底部的标签栏切换.我为每个人设置了一个视图控制器,它们都可以正常工作.唯一的问题是我不知道如何在不同的视图之间共享信息 - 例如,我在一个获取UISegmentedControl输出的IBAction并将选择存储为整数(1,2,3,4) .问题是,我不知道如何从第一个视图控制器(实际使用该信息完成任务的那个)访问该整数.我确定这是一个非常基本的问题,但我的google-fu似乎没有在这里工作.谢谢!

ugh*_*fhw 5

使用MVC方法,信息不应存储在视图控制器中.您应该有一个单独的对象来存储信息,视图控制器加载它,视图显示它.最简单的方法是将信息存储在应用程序的委托中.然后,只要视图控制器需要查找/更改某些信息,它就可以[[UIApplication sharedApplication] delegate]用来获取代理,并根据需要加载/更改信息.加载信息以更新viewDidLoad或viewWillDisplay:中的显示,并在操作方法中更改它.

编辑示例:

DelegateClass.h

@interface DelegateClass : NSObject {
    //ivars
    float number1;
}
@property (assign) float number1;
...
@end
Run Code Online (Sandbox Code Playgroud)

DelegateClass.m

#import "DelegateClass.h"
@implementation DelegateClass
@synthesize number1;
...
@end
Run Code Online (Sandbox Code Playgroud)

MyViewController.m

#import "DelegateClass.h"
@implementation MyViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    DelegateClass *delegate = [[UIApplication sharedApplication] delegate];
    float number1 = delegate.number1;
    ...
}
- (IBAction)actionMethod:(id)sender {
    float number1 = sender.floatValue;//get new value
    ((DelegateClass*)[[UIApplication sharedApplication] delegate]).number1 = number1;
}
...
@end
Run Code Online (Sandbox Code Playgroud)