添加联系人:
#import "AddContactViewController.h"
#import "AppDelegate.h"
#import "Contact+Create.h"
@interface AddContactViewController ()
@property (nonatomic, strong) NSManagedObjectContext *context;
@end
@implementation AddContactViewController
@synthesize context = _context;
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
UITextField *nameTextField = [[UITextField alloc] initWithFrame:CGRectMake(20.0f, 20.0f, 280.0f, 44.0f)];
nameTextField.placeholder = @"姓名";
nameTextField.tag = 100;
[self.view addSubview:nameTextField];
UITextField *abbreviationTextField = [[UITextField alloc] initWithFrame:CGRectMake(20.0f, 80.0f, 280.0f, 44.0f)];
abbreviationTextField.placeholder = @"姓名缩写 请输入字母";
abbreviationTextField.tag = 101;
[self.view addSubview:abbreviationTextField];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = ((AppDelegate *)[UIApplication sharedApplication].delegate).managedObjectContext;
self.navigationItem.title = @"添加联系人";
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)];
}
- (void)save
{
UITextField *nameTextField = (UITextField *)[self.view viewWithTag:100];
UITextField *abbreviationTextField = (UITextField *)[self.view viewWithTag:101];
if ([nameTextField.text length] > 0 && [abbreviationTextField.text length] == 1) { // text type checking ?? !!! YES!
NSInteger unique = arc4random()%100000;
NSString *uniqueTemp = [NSString stringWithFormat:@"%d",unique]; // unique? need to enter unique numner is unique . Haha..!
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:nameTextField.text, @"name", abbreviationTextField.text, @"abbreviation", uniqueTemp , @"unique", nil];
[Contact saveContactWithDictionary:dic InManagedObjectContext:self.context];
[self.navigationController popViewControllerAnimated:YES];
} else {
NSLog(@"sleep..oop...");
}
}
@endMainList方式:
#import "ContactListViewController.h"
#import "AppDelegate.h"
#import "Tool.h"
#import "UIImageView+WebCache.h"
#import "ContactViewController.h"
#import "AddContactViewController.h"
@interface ContactListViewController ()<UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSManagedObjectContext *context;
@property (nonatomic, strong) NSFetchedResultsController*fetchedResultsController;
@property (nonatomic, strong) NSArray *sectionTitle;
@end
@implementation ContactListViewController
@synthesize tableView = _tableView;
@synthesize context = _context;
@synthesize fetchedResultsController = _fetchedResultsController;
@synthesize sectionTitle = _sectionTitle;
#pragma mark -
#pragma mark - Private
- (void)addContact // write a simple example , only need to fill in NAME
{
AddContactViewController *addContactViewController = [[AddContactViewController alloc] init];
[self.navigationController pushViewController:addContactViewController animated:YES];
// maybe use present*** ,this is the most logical answer in my view.
}
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"abbreviation" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.context sectionNameKeyPath:@"abbreviation" cacheName:nil];
_fetchedResultsController.delegate = self;
[_fetchedResultsController performFetch:NULL];
return _fetchedResultsController;
}
#pragma mark -
#pragma mark - Life
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 416.0f) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.view addSubview:self.tableView];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = ((AppDelegate *)[UIApplication sharedApplication].delegate).managedObjectContext;
self.navigationItem.title = @"联系人";
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addContact)];
//create text data
[Tool createTextDataWithManagedObjectContext:self.context];
self.sectionTitle = [Tool createSectionNameTitles];
}
#pragma mark -
#pragma mark - UITableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.fetchedResultsController sections] count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [[[self.fetchedResultsController sections] objectAtIndex:section] name];
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
if ([self.fetchedResultsController.sectionIndexTitles containsObject:title]) {
NSLog(@"index %d",index);
NSInteger newIndex = [self.fetchedResultsController.sectionIndexTitles indexOfObject:title];
NSLog(@"newindex %d",newIndex);
return [self.fetchedResultsController sectionForSectionIndexTitle:title atIndex:newIndex];
} else {
return 0;
}
}
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return self.sectionTitle;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ContactListCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Contact *contact = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = contact.name;
[cell.imageView setImageWithURL:[NSURL URLWithString:contact.avatar] placeholderImage:[UIImage imageNamed:@"touxiang"]];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 45.0f;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Contact *contact = [self.fetchedResultsController objectAtIndexPath:indexPath];
ContactViewController *contactViewController = [[ContactViewController alloc] initWithContact:contact];
[self.navigationController pushViewController:contactViewController animated:YES];
}
#pragma mark - NSFetchedResultControllerDelegate
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
{
switch (type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
default:
break;
}
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
{
switch (type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeMove:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
default:
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
@endcontact的一个item显示:
#import "ContactViewController.h"
#import "UIImageView+WebCache.h"
@interface ContactViewController ()
@property (nonatomic, strong) Contact *contact;
@end
@implementation ContactViewController
@synthesize contact = _contact;
#pragma mark- Life
- (id)initWithContact:(Contact *)contact
{
if (self = [super init]) {
self.contact = contact;
}
return self;
}
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.navigationItem.title = self.contact.name;
UIImageView *avatarView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 45.0f, 45.0f)];
[avatarView setImageWithURL:[NSURL URLWithString:self.contact.avatar] placeholderImage:[UIImage imageNamed:@"touxiang"]];
[self.view addSubview:avatarView];
UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(65.0f, 10.0f, 130.0f, 22.0f)];
nameLabel.text = self.contact.name;
[self.view addSubview:nameLabel];
UILabel *mobileLabel = [[UILabel alloc] initWithFrame:CGRectMake(65.0f, 100.0f, 160.0f, 22.0f)];
mobileLabel.text = self.contact.mobile;
[self.view addSubview:mobileLabel];
//............. add all information from self.contact.name . If we need to edit , we can use textField;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
@end