OC-通讯录

//
//  Card.h
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Card : NSObject

@property (nonatomic, copy) NSString *contactName;
@property (nonatomic, assign) NSUInteger phoneNum;

+(instancetype)cardWithContanctName:(NSString *)newName andPhoneNum:(NSUInteger)newPoneNum;

@end
//
//  Card.m
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import "Card.h"

@implementation Card
@synthesize contactName,phoneNum;
+(instancetype)cardWithContanctName:(NSString *)newName andPhoneNum:(NSUInteger)newPoneNum{
    Card *card = [[Card alloc]init];
    card.contactName=newName;
    card.phoneNum=newPoneNum;
    return card;
}
@end
//
//  PhoneBook.h
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Card.h"
@interface PhoneBook : NSObject
@property (nonatomic, copy)NSString *masterName;
@property (nonatomic, strong)NSMutableArray *cards;

//展示当前电话本中所有联系人信息
-(void)showInfo;

//类方法的初始化
+(instancetype)phoneBookWithMasterName:(NSString *)name andCards:(NSArray *)cardAry;
//添加名片
-(void)addNewCard:(Card *)card;

//删除名片
-(void)deleteCard:(Card *)card;
-(void)deleteCardWithName:(NSString *)cardName;
-(void)deleteCardWithPoneNum:(NSUInteger)phoneNum;

//根据电话号码排序
-(void)sortByPhoneNumAsc;

//根据姓名排序
-(void)sortByNameAsc;

@end
//
//  PhoneBook.m
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import "PhoneBook.h"
#import "Card.h"
@implementation PhoneBook

@synthesize masterName,cards;

//类方法的初始化
#pragma mark 类方法得到对象
+(instancetype)phoneBookWithMasterName:(NSString *)name andCards:(NSArray *)cardAry{
    PhoneBook *book = [PhoneBook new];
    book.masterName=name;
    book.cards=[NSMutableArray arrayWithObject:cardAry];
    return book;
}

#pragma mark 展示信息
//展示当前电话本中所有联系人信息
-(void)showInfo{
    NSLog(@"show %@,",masterName);
    for (Card *card in cards) {
        NSLog(@"联系人信息:%@, 电话 %lu",card.contactName,card.phoneNum);
    }
}

//添加名片
#pragma mark 添加名片
-(void)addNewCard:(Card *)card{
    [cards addObject:card];
}

//删除名片
-(void)deleteCard:(Card *)card{
    [cards removeObject:card];
}

-(void)deleteCardWithName:(NSString *)cardName{
    for (int i=0; i<cards.count; ) {
        Card *card = [cards objectAtIndex:i];
        if ([card.contactName isEqualToString:cardName]) {
            [cards removeObject:card];
        }else{
            i++;
        }
    }
}
-(void)deleteCardWithPoneNum:(NSUInteger)phoneNum{
    for (int i=0; i<cards.count; ) {
        Card *card = [cards objectAtIndex:i];
        if (card.phoneNum==phoneNum) {
            [cards removeObject:card];
        }else{
            i++;
        }

    }
}

//根据电话号码排序
#pragma mark 根据号码排序
-(void)sortByPhoneNumAsc{
    for (int i=0; i<cards.count-1; i++) {
        for (int j=0; j<cards.count-1-i; j++) {
            if (((Card *)cards[j]).phoneNum > ((Card *)cards[j+1]).phoneNum) {
                [cards exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
        }
    }
}

//根据姓名排序
-(void)sortByNameAsc{
    for (int i=0; i<cards.count-1; i++) {
        for (int j=0; j<cards.count-1-i; j++) {
            if ([((Card *)cards[j]).contactName compare:((Card *)cards[j+1]).contactName] == NSOrderedDescending) {
                [cards exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
        }
    }
}

@end
//
//  main.m
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Card.h"
#import "PhoneBook.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
       //名片1
        Card *card1 = [Card new];
        card1.contactName = @"sunny";
        card1.phoneNum = 18363858590;

        //名片2
        Card *card2 = [Card cardWithContanctName:@"apple" andPhoneNum:18363858591];

        //名片3
        Card *card3 = [Card cardWithContanctName:@"ios" andPhoneNum:18363858592];

        //名片4
        Card *card4 = [Card cardWithContanctName:@"oc" andPhoneNum:18363858593];

        //名片5
        Card *card5 = [Card cardWithContanctName:@"ui" andPhoneNum:18363858594];

        //电话本1
        PhoneBook *phoneBook1 = [PhoneBook new];
        phoneBook1.masterName = @"lovke";
        phoneBook1.cards = [NSMutableArray array];//必须得初始化数组
        [phoneBook1.cards addObjectsFromArray:@[card1,card2]];

        //展示
        [phoneBook1 showInfo];

        //电话本2
        PhoneBook *phoneBook2 = [PhoneBook phoneBookWithMasterName:@"kehui" andCards:(NSArray *)card2];

        [phoneBook2 addNewCard:card1];
        [phoneBook2 addNewCard:card3];
        [phoneBook2 addNewCard:card4];
        [phoneBook2 addNewCard:card5];
        //展示
        [phoneBook2 showInfo];

//        //删除
//        [phoneBook2 deleteCard:card1];
//        //展示
//        [phoneBook2 showInfo];
//
//        //按姓名删除
//        [phoneBook2 deleteCardWithName:@"ui"];
//        //展示
//        [phoneBook2 showInfo];
//
//        //按电话号码删除
//        [phoneBook2 deleteCardWithPoneNum:18363858593];
//        //展示
//        [phoneBook2 showInfo];

        //电话本3
        PhoneBook *phoneBook3 = [PhoneBook phoneBookWithMasterName:@"qiuxuewei" andCards:(NSArray *)card1];

        [phoneBook3 addNewCard:card2];
        [phoneBook3 addNewCard:card3];
        [phoneBook3 addNewCard:card5];
        [phoneBook3 addNewCard:card4];
        [phoneBook3 showInfo];

        //电话排序
        [phoneBook3 sortByPhoneNumAsc];
        [phoneBook3 showInfo];

        //姓名排序
        [phoneBook3 sortByNameAsc];
        [phoneBook3 showInfo];
    }
    return 0;
}

运行结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 08:14:36

OC-通讯录的相关文章

OC 通讯录 中等难度

Contact.h #import <Foundation/Foundation.h> @interface Contact : NSObject { NSString *_name; NSString *_gender; NSInteger _age; NSString *_address; NSString *_phoneNumber; NSString *_group; } - (void)setName:(NSString *)name; - (NSString *)name; - (

用OC实现实现中等难度通讯录详解

用OC实现中等难度通讯录.需求:      1.定义联系人类Contact.实例变量:姓名(拼音,?字?大写).性别.电话号码. 住址.分组名称.年龄.?法:?定义初始化方法或便利构造器方法.显?联系人信息      2.在main.m中定义字典,分组管理所有联系人.分组名为26个大写的英文字母.      3.可以添加联系?对象,如果姓名或电话号码为空,添加失败.添加联系?到匹配的分组.      4.获取某个分组名称下所有联系人,并且按照姓名升序排列.      5.从通讯录中根据电话号码搜

(一〇一)集成静态库RHAddressBook实现OC访问通讯录

使用官方的AddressBook框架仅能使用C语言访问通讯录,十分不便,这里介绍集成第三方框架RHAddressBook的方法,该框架可以通过OC访问和操作通讯录. 该框架是一个静态库,集成比较复杂. 首先下载该框架:RHAddressBook,下面有关于集成的一些介绍,下面简单的介绍一下集成的过程. ①首先把静态库工程直接拖入自己的工程: ②选中自己的工程,工程配置中选择Build Phases,按照下图导入两个文件,点击左侧的加号添加即可. ③选择Build Settings,搜索Heade

OC之实现中级通讯录

//实现中级通讯录. /作业1: 实现通讯录.需求:        //1.定义联系人类Contact. 实例变量:姓名(拼音 首字母大写), 性别, 电话号码, 住址, 分组名称, 年龄. 方法: 自定义初始化方法(姓名 ,电话号码), 显示联系人信息.        //2./2.在main.m中定义字典, 分组管理所有联系人. 分组名为26个大写的英文字母.        //3.可以添加联系人对象, 如果姓名或电话号码为空, 添加失败.添加联系人到匹配的分组.        //4.获取

用OC语言完成简易通讯录(实现增删改查)功能.

(注:使用MRC) 一.功能描述: main函数中通过使用Person类和AddressBook类,创建对象.调用方法,实现以下8个功能: 1).使用便利构造器创建四个Person类的实例(联系人). 姓名:Lucy 性别:女 电话:123 年龄:21 姓名:Joe 性别:男 电话:456 年龄:17 姓名:Baby 性别:女 电话:789 年龄:27 姓名:Linda 性别:女 电话:000 年龄:21 2).创建一个AddressBook类的实例对象(通讯录). 3).使用AddressBo

iOS 修改通讯录联系人地址(address)崩溃原因分析

目前项目中需要对iOS系统通讯录进行读取,修改操作.在进行对地址修改的时候,出现了一个奇怪现象: ● 如果contact没有address字段(或者一个全新的contact),对它的address进行修改是可以成功的, ● 如果这个人有过address字段,此时对它就行修改就崩溃.控制台打出: *** -[CFString release]: message sent to deallocated instance 0x81d26f0 这应该是一个僵尸对象,重复释放某一个对象.首先我对修改通讯录

iOS开发——图形编程OC篇&amp;(六)Quartz 2D高级使用(二)

Quartz 2D高级使用 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepathref 调用该方法相当于创建了一个路径,这个路径用来保存绘图信息. 2.把绘图信息添加到路径里边. 以前的方法是点的位置添加到ctx(图形上下文信息)中,ctx 默认会在内部创建一个path用来保存绘图信息. 在图形上下文中有一块存储空间专门用来存储绘图信息,其实这块空间就是CGMutablePathRef. 3.把路径

iOS开发 - 私人通讯录实例

私人通讯录实例 此实例主要练习UIViewController控制器的使用 创建模型类Model /** copy : NSString\NSMutableString\block weak : 代理\UI控件 strong : 其他OC对象 assign : 基本数据类型(int\float)\枚举\结构体 */ #import <Foundation/Foundation.h> @interface ZLContact : NSObject @property(nonatomic,copy

通讯录的初步了解与使用

在开发中我们可能经常碰到需要或许用户的通讯录信息,甚至需要对其进行一些修改操作,那么怎么去获取通讯录呢?我们可以这么想,通讯录保存在手机内就是用一种数据表的形式保存,而我们对通讯录的需求无非就是增删改查,目的很明确,那试试呗, 首先你得引用AddressBook.framework框架,在文件中引用#import <AddressBook/AddressBook.h>,接下来就按照我们操作数据库的思路来走吧,(一开始的时候要判断系统版本,因为ios对通讯录在6.0以上版本做了更好的用户隐私提示

iOS通讯录整合,兼容iOS789写法,附demo

苹果的通讯录功能在iOS7,iOS8,iOS9 都有着一定的不同,iOS7和8用的是 <AddressBookUI/AddressBookUI.h> ,但是两个系统版本的代理方法有一些变化,有些代理方法都标注了 NS_DEPRECATED_IOS(2_0, 8_0) 并推荐了另一个代理方法与之对应.  而iOS8到iOS9则是直接弃用了<AddressBookUI/AddressBookUI.h>取而代之的是<ContactsUI/ContactsUI.h>,后者是OC