How to use NSNotification in iOS?

1. Adding an observer 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadDataWithNotification:) name:@"Test" object:nil];

2. Adding the observe method:

- (void)loadDataWithNotification: (NSNotification *) notification
{
    
    if ([notification.name isEqualToString:@"Test"]) {
        NSLog(@"Notification received");
        [self retrieveData];
    }
}

3. Posting notification on the other ViewController.

[[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:nil];


Notification will be sent back to the MainViewController when the user click on the add Button, in order to notify the MainViewController to reload its data.

MainViewController


DetailViewController



Main code:

TableViewController.h

//
//  TableViewController.h
//  CoreDataTutorial
//
//  Created by Jason on 28/05/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
@interface TableViewController : UITableViewController

@property (strong, nonatomic) NSManagedObjectContext *context;
@end


TableViewController.m

//
//  TableViewController.m
//  CoreDataTutorial
//
//  Created by Jason on 28/05/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "TableViewController.h"
#import "DetailViewController.h"
#import "People.h"

@interface TableViewController ()
@property (strong, nonatomic) NSArray *peopleArray;
@end

@implementation TableViewController
@synthesize peopleArray=_peopleArray;
@synthesize context=_context;


//retrieve data 
- (void)retrieveData
{
    NSFetchRequest *request=[[NSFetchRequest alloc] init];
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"People" inManagedObjectContext:self.context];
    
    NSSortDescriptor *sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    
    
    request.entity=entity;
    request.sortDescriptors=[NSArray arrayWithObject:sortDescriptor];
    request.fetchBatchSize=20;
    NSError *error;
    self.peopleArray=[self.context executeFetchRequest:request error:&error];
    [self.tableView reloadData];
}

- (void)loadDataWithNotification: (NSNotification *) notification
{
    
    if ([notification.name isEqualToString:@"Test"]) {
        NSLog(@"Notification received");
        [self retrieveData];
    }
}

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadDataWithNotification:) name:@"Test" object:nil];
    }
    return self;
}



- (void)viewDidLoad
{
    [super viewDidLoad];
    [self retrieveData];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
 
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add)];
}


- (void)add
{
    DetailViewController *detailView=[[DetailViewController alloc] init];
    [self presentModalViewController:detailView animated:YES];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.peopleArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    // Configure the cell...
    if (!cell) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    
    People *people=(People *)[self.peopleArray objectAtIndex:indexPath.row];
    cell.textLabel.text=people.name;
    cell.detailTextLabel.text=[NSString stringWithFormat:@"%@",people.number];
    
    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}

@end


DetailViewController.h

//
//  DetailViewController.h
//  CoreDataTutorial
//
//  Created by Jason on 28/05/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"



@interface DetailViewController : UIViewController
{
    IBOutlet UITextField *nameField;
    IBOutlet UITextField *numberField;
}


@end


DetailViewController.m

//
//  DetailViewController.m
//  CoreDataTutorial
//
//  Created by Jason on 28/05/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "DetailViewController.h"
#import "People.h"

@interface DetailViewController ()

@property (nonatomic, strong) AppDelegate *app;

@end

@implementation DetailViewController
@synthesize app=_app;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UINavigationBar *navigationBar=[[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        UINavigationItem *navigationItem=[[UINavigationItem alloc] initWithTitle:@"Add Detail"];
        [navigationBar pushNavigationItem:navigationItem animated:YES];
        
        
        UIBarButtonItem *addButton=[[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStyleBordered target:self action:@selector(add)];
        UIBarButtonItem *cancelButton=[[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancel)];
        
        navigationItem.leftBarButtonItem=cancelButton;
        navigationItem.rightBarButtonItem=addButton;

        //adding navigationBar
        [self.view addSubview:navigationBar];
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.app=[[UIApplication sharedApplication] delegate];
}

- (void)add
{
    NSManagedObjectContext *context=self.app.managedObjectContext;
    People *people=[NSEntityDescription insertNewObjectForEntityForName:@"People" inManagedObjectContext:context];
    
    people.name=nameField.text;
    people.number=[NSNumber numberWithInt:[numberField.text intValue]];
    
    NSError *error;
    if (![context save:&error ]) {
        UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Can not save people"delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }else {
            UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"saved" message:@"The record has saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
    }
    
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:nil];
    [self dismissModalViewControllerAnimated:YES];
    
    

}

- (void)retrieveData
{
    //retrieving data
    NSManagedObjectContext *context=self.app.managedObjectContext;

    NSFetchRequest *request=[[NSFetchRequest alloc] init];
    NSEntityDescription *entityDescription=[[NSEntityDescription alloc] init];
    request.entity=entityDescription;
    NSError *error;
    NSArray *peopleArray=[context executeFetchRequest:request error:&error];
    
    for(People *people in peopleArray){
        NSLog(@"name=%@,number=%@",people.name, people.number);
    }    
}

- (void)cancel
{
    [self dismissModalViewControllerAnimated:YES];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值