一个完善的APP由很多绚丽的界面组成,在这些绚丽界面中流传着很多数据,这些数据包括用户输入的,也包括服务器返回的,总之就是APP程序下一个界面需要的数据。那么,在ios APP中界面数据的传递有如何实现呢?如果APP需要数据的缓存功能,又改如何实现呢?
首先,APP中界面数据的传递有大概这几种解决方式:
1、使用SharedApplication,在程序中定义一个类似全局的变量来 暂时存着上一个界面的数据值,在下一个界面需要时取出来;
2、使用文件或者使用NSUserdefault形式来传递数据;
//1、创建user defaults:
NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];
//2、添加数据到 user defaults:
[accountDefaults setObject:nameField.text forKey:UserDefaultNameKey];
//3、从user defaults中获取数据:
[accountDefaults objectForKey:NCUserDefaultNameKey]
4、通过Delegate来传递数据:
假设在界面 A -->界面 B,在界面B中赋值一个变量 userName 值,然后 由界面B-->界面A 。
1、首先定义个一委托UIViewUserNameDelegate用来传递值:
@protocol UIViewUserNameDelegate
// 必选方法
- (void)userName:(NSString *)value;
// 可选方法
@optional
-(void)omethod;
@end
这个UIViewUserNameDelegate 是用来传数据值的
2、在界面 A 的头文件里,遵守delegate协议,并实现delegate方法,
#import <UIKit/UIKit.h>
#import "UIViewUserNameDelegate.h"
@interface DelegateSampleViewController : UIViewController <UIViewUserNameDelegate>
{
UITextField *_value;
}
@property(nonatomic, retain) IBOutlet UITextField *value;
- (IBAction)buttonClick:(id)sender;
@end
同时 在 A界面中的 A.m 中实现这个委托的必选方法:
- (void)userName:(NSString *)value
{
self.value.text = value;
}
-(void)optionalMethod{
}
button 的Click方法,打 开界面B,并将 界面B 的delegate实现方法指向 界面A。
- (IBAction)buttonClick:(id)sender
{
ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];
valueView.delegate = self; // 将a类中的self传递给b类的delegate
[self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:valueView animated:YES];
}
在界面B中实现的代码:
#import <UIKit/UIKit.h>
#import "UIViewUserNameDelegate.h"
@interface ValueInputView : UIViewController {
NSObject<UIViewUserNameDelegate> * delegate;
UITextField *_value;
}
@property(nonatomic, retain)IBOutlet UITextField *value;
@property(nonatomic, assign) NSObject<UIViewUserNameDelegate> * delegate; //这里用assign而不用retain是为了防止引起循环引用。
- (IBAction)buttonClick:(id)sender;
@end
然后再 界面B 中 的 B.m:
#import "ValueInputView.h"
@implementation ValueInputView
@synthesize delegate;
@synthesize value = _value;
- (void)dealloc {
[self.value release];
[super dealloc];
}
- (IBAction)buttonClick:(id)sender
{
[delegate userName:self.value.text]; // 通过delegate调用代理方法
[self dismissModalViewControllerAnimated:YES];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
[super viewDidUnload];
self.delegate = nil;
}
@end
这样个Demo,主要是用Delegate 在界面A中打开 界面B,在 界面B中输入 一个用户名称的值,然后返回到界面A显示。
Delegate的界面中传递数据时,诺 由界面 A -->界面B 的传递数据,为 正向传值 ,诺再由 界面B 返回到 界面A 时,由界面B 传递到 界面A的数据,为逆向传值。
ios 的APP中,数据的存储方式:
1、使用 User Defaults 的形式
2、使用 Property List 的形式
3、使用 Object archives 的形式
4、使用 SQLite 3 数据库形式
5、使用 Coco Data