How to use NSNotification in iOS?
来源:互联网 发布:apache ignite 性能 编辑:程序博客网 时间:2024/05/22 05:34
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];
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
- How to use NSNotification in iOS?
- How to use cocoa pod in your iOS project
- iOS: How to use "Block"
- How to use Serial Port in Windows
- How To Use Macro In Program.
- How to use virt-install in OpenSolaris
- How to use tinyfck in drupal
- How to use Regular Expression in LotusScript
- How to Use PeekMessage() Correctly in Windows
- How to use IMGDECMP.DLL in WindowsCE
- how to use deb files in ubuntu
- How to use Common Navigator in RCP
- How to use SCAT in ECC6
- HOW TO : use DDMS in Ubuntu
- How to use getBodyClass() in magento?
- How to use forms in Tapestry 5.
- How to use svn in Linux
- How to use git in Linux
- oralce -- 数据库管理工具出现的oci.dll问题
- 一个让printf不正常工作的例子 - 已解决
- 23种设计模式(13):迭代器模式
- 3.程序流程控制
- NET控件ZedGraph使用帮助
- How to use NSNotification in iOS?
- 会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它 解决方法之一
- 西安二〇二〇观后感
- PhoneGap优化解决方案
- 数据库的在线备份和还原
- 28款网页CSS设计工具和生成器
- Struts2 之入门以及工作流程
- 关于DEL网卡驱动的一次故障
- 第15周实验报告1