一個完善的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