iOS의 인터페이스 전송(알림, 속성, 프로토콜, NSUserDefaults, KVC)

알림 값 알림은 다이얼 컨트롤러 사이에서 자주 사용하는 값 알림 프록시 방식입니다.NSNotificationCenter는 모든 객체가 센터에 공지를 보낼 수 있고 모든 객체가 센터의 공지를 수신할 수 있는 결합 해제 방법을 제공합니다.
  • 알림 보내기(전송 페이지)
  • // NSNotificationCenter, 
     - (IBAction)changeColorAction2:(id)sender {
        UIColor *color = [UIColor greenColor];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeColorKey" object:color];
        [[self navigationController] popViewControllerAnimated:YES];
    }
  • 등록 알림(수치 페이지)
  • // 
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor:) name:@"ChangeColorKey" object:nil];
  • 응답 수신 알림
  • // NSNotificationCenter
     - (void)changeColor:(NSNotification *)notification{
        if([notification object] != nil)
        {
            UIColor *color = [notification object];
            [self.view setBackgroundColor:color];
        }
    }
  • 제거 알림
  • - (void)dealloc {
        // 
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ChangeColorKey" object:nil];
    }

    참고: 주의 매개변수 notification Observer는 삭제할 관찰자이므로 nil로 설정할 수 없습니다.
    프로토콜 리셋 A 페이지push에서 B 페이지로 이동합니다. 만약에 B 페이지의 정보가 A 페이지로 리셋(리셋)하려면 에이전트 리셋을 사용합니다. 그 중에서 B는 프로토콜과 성명 에이전트를 정의하고 A는 에이전트를 확인하고 실현합니다. A는 B의 에이전트로 합니다.
  • 다른 클래스에 전송할 클래스 헤더 파일에 프로토콜을 정의합니다
  • @protocol ViewControllerAdelegate
    
    -(void)changeBgColorFromCtrlA:(ViewControllerA *)aView withColor:(UIColor *)color;
    
    @end
  • 이 클래스에 에이전트 속성 성명
  • @interface ViewControllerA : UIViewController
    
    @property( assign, nonatomic ) id< ViewControllerAdelegate > delegate;
    
    @end
  • 네.m에서 실현
  • @implementation ViewControllerA
    @synthesize delegate;
    
  • 트리거 전송이 필요한 방법에서 프로토콜을 호출하는 방법
  • // Delegate
    -(IBAction)changeColorAction:(id)sender{
        [delegate changeBgColorFromCtrlA:self withColor:[UIColor grayColor]];
        [[self navigationController] popViewControllerAnimated:YES];
    }
  • 전달된 클래스에 있는.h 파일에서 이 프로토콜 인용
  • @interface ViewControllerB : UIViewController<ViewControllerAdelegate>
    
    @end
  • 네.m중
  • ViewControllerA *_ViewControllerA = [stryBoard instantiateViewControllerWithIdentifier:@"ViewControllerA"];
        _ViewControllerA.delegate = self;
  • 그리고 이 방법을 실현
  • // Delegate
    -(void)changeBgColorFromCtrlA:(ViewControllerA *)aView withColor:(UIColor *)color{
        [self.view setBackgroundColor:color];
    }

    개인이 쓴 '알림 전송 값' 과 '프로토콜 전송 값' 의 모든 demo를 동봉합니다
  • ViewControllera의.h 파일
  • // Created by Ydw on 16-03-17.
    // Copyright (c) 2016  com. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    @class ViewControllerA;
    
    @protocol ViewControllerAdelegate
    
    -(void)changeBgColorFromCtrlA:(ViewControllerA *)aView withColor:(UIColor *)color;
    
    @end
    
    @interface ViewControllerA : UIViewController
    
    @property( assign, nonatomic ) id< ViewControllerAdelegate > delegate;
    
    -(IBAction)changeColorAction:(id)sender;
    -(IBAction)changeColorAction2:(id)sender;
    
    @end
  • ViewControllera의.m 파일
  • // Created by Ydw on 16-03-17.
    // Copyright (c) 2016  com. All rights reserved.
    //
    
    #import "ViewControllerA.h"
    #import "ViewControllerB.h"
    @interface ViewControllerA ()
    
    @end
    
    @implementation ViewControllerA
    @synthesize delegate;
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.title = @"Ctrl A";
    }
    
    // Delegate
    - (IBAction)changeColorAction:(id)sender {
        [delegate changeBgColorFromCtrlA:self withColor:[UIColor grayColor]];
        [[self navigationController] popViewControllerAnimated:YES];
    }
    
    // NSNotificationCenter, 
    - (IBAction)changeColorAction2:(id)sender {
        UIColor *color = [UIColor greenColor];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeColorKey" object:color];
        [[self navigationController] popViewControllerAnimated:YES];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    
  • ViewControllerB의.h 파일
  • // Created by Ydw on 16-03-17.
    // Copyright (c) 2016  com. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    #import "ViewControllerA.h"
    @interface ViewControllerB : UIViewController<ViewControllerAdelegate>
    
    @end
  • ViewControllerB의.m 파일
  • // Created by Ydw on 16-03-17.
    // Copyright (c) 2016  com. All rights reserved.
    //
    
    #import "ViewControllerB.h"
    
    @implementation ViewControllerB
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.title = @"Ctrl B";
    
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Go CtrlA" style:UIBarButtonItemStylePlain target:self action:@selector(go)];
        // 
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor:) name:@"ChangeColorKey" object:nil];
    }
    
    -(void)go {
        UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
        ViewControllerA *_ViewControllerA = [stryBoard instantiateViewControllerWithIdentifier:@"ViewControllerA"];
        _ViewControllerA.delegate = self;
        [[self navigationController] pushViewController:_ViewControllerA animated:YES];
        _ViewControllerA = nil;
    
    }
    
    // Delegate
    -(void)changeBgColorFromCtrlA:(ViewControllerA *)aView withColor:(UIColor *)color{
        [self.view setBackgroundColor:color];
    }
    
    // NSNotificationCenter
    - (void)changeColor:(NSNotification *)notification{
        if([notification object] != nil)
        {
            UIColor *color = [notification object];
            [self.view setBackgroundColor:color];
        }
    }
    
    - (void)dealloc{
        // 
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ChangeColorKey" object:nil];
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    속성 전송속성 전송은 A 페이지에 있는 정보를 속성을 통해 B 페이지로 전달하는 데 사용됩니다.B 페이지는 A 페이지에서 직접 속성 값을 지정하여 A 페이지의 값을 B 페이지로 전송하는 속성을 정의합니다.(상대적으로 가장 간단한 전가는 구체적으로 설명하지 않는다)
  • 우선SecondViewController 보기(즉 B페이지)에서 전달된 값을 저장하는 속성이 필요합니다.
  • @property(nonatomic,retain) NSString *firstValue;// 
  • 그리고MainViewController 보기(즉 A 페이지)는 SecondViewController 보기의 헤더 파일을 인용해야 한다. 보기의 단추를 누르면 이벤트에서SecondViewController의 대상을 통해 전달해야 할 값이firstValue에 존재한다.
  •  - (void)buttonAction:(UIButton *)button {
        SecondViewController *second = [[SecondViewController alloc]init];
        second.firstValue = _txtFiled.text;
        [self.navigationController pushViewController:second animated:YES];
    }
  • 페이지가 바뀌면SecondViewController 보기에서 저장된 값의 속성을 통해 방금 전달된 값을 찾을 수 있습니다:
  • [_txtFiled setText:_firstValue];// ,firstValue 

    NSUserDefaults 1, NSUserDefaults는 로컬의 일부 경량급 데이터를 기록하는 단일 클래스입니다.userDefaults 대상을 통해 데이터를 NSUserDefaults의plist 파일에 저장합니다. 이 파일은 샌드박스에 있는/Library/Preferences/NSUserDefaults 파일입니다.plist 이 위치에서2. NSUserDefaults가 지원하는 데이터 형식은 NSNumber(Integer, Float, Double), NSString, NSDate, NSArray, NSDictionary, BOOL 유형이다.3. NSUserDefaults는 로컬 데이터의 지속화의 일종으로 투기적으로 데이터 전송을 할 수 있다. NSUserDefaults에 DefaultsKey를 설정하면 모든 페이지에서DefaultsKey를 통해 값을 얻을 수 있다.간단한 예를 들어 다음과 같이 설명하십시오.
  • NSUserDefaults 저장
  •     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSMutableArray *rootArray = nil;
        if ([defaults objectForKey:DefaultsKey]) {
            rootArray = [NSMutableArray arrayWithArray:[defaults objectForKey:DefaultsKey]];
        }else {
            rootArray = [NSMutableArray array];
        }
        NSDictionary *infoDictionary = @{NameKey:@"Ydw",PhoneKey: @"1314520"};
        [rootArray addObject:infoDict];
        [defaults setObject:rootArray forKey:DefaultsKey];
        [defaults synchronize];
  • NSUserDefaults 수치
  •     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSArray *rootArray = [defaults objectForKey:DefaultsKey];
        if (rootArray && rootArray.count > 0) {
            NSLog(@"%@", rootArray);
        }else {
            NSLog(@" !");
        }
  • NSUserDefaults 삭제 데이터
  •     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults removeObjectForKey:DefaultsKey];
        [defaults synchronize];
        NSLog(@" !");

    KVC KVC는 키 값 인코딩의 약자입니다.iOS에서는 속성의 이름(즉 Key)을 사용하여 객체에 간접적으로 액세스하는 방법을 제공합니다.실제적으로 클래스 정의를 통해 우리는 클래스의 각종 속성을 볼 수 있다. 그러면 속성의 이름을 사용하면 클래스가 실례화된 대상의 이 속성 값에 접근할 수 있다.이 방법은 Getter/setter 방법을 통해 대상의 속성에 접근하지 않을 수 있습니다.KVC는 NSArray/NSSet 등에서 지원됩니다.
  • myInformation 클래스 정의
  • @interface myInformation : NSObject {  
        NSString *_name;  
        int      _age;  
        int      _height;  
        int      _weight;  
    }  
    @end  
  • 선언 속성 대상
  • @interface myViewController : UIViewController 
    
    @property (nonatomic, retain) myInformation *information;  
    
    @end  
  • 클래스의 속성을 KVC로 읽고 변경하는 값
  •  - (void)useKVC {  
        information = [[myInformation alloc] init];    
        NSLog(@"information's init height = %@", [information valueForKey:@"height"]);  
        [information setValue:[NSNumber numberWithInt:168] forKey:@"height"];  
        NSLog(@"information's height = %@", [information valueForKey:@"height"]);  
    } 
  • KVC의 일반적인 방법
  • - (id)valueForKey:(NSString *)key; - (void)setValue:(id)value forKey:(NSString *)key;

    좋은 웹페이지 즐겨찾기