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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章