ios中常見的界面傳數據與數據存儲方

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

       3、通過一個單例的實例來傳遞數據;
       
          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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章