您的位置:首页 > 其它

单例的创建于数据的加载

2015-12-24 22:43 190 查看
#import <UIKit/UIKit.h>

@interface Person : NSObject

// 在这里声明详细信息页面所包含的值对应类型具体值

@property (nonatomic, strong)UIImage *photo;

@property (nonatomic, copy)NSString *name;

@property (nonatomic, copy)NSString *sex;

@property (nonatomic, copy)NSString *address;

@property (nonatomic, copy)NSString *phoneNumber;

@property (nonatomic, copy)NSString *word;

@end

#import "Person.h"

@interface DataHandler : NSObject

@property (nonatomic, strong)NSMutableDictionary *data;

// 单例的第二步:提供一个类方法,返回自身对象

+ (instancetype)shareInstance;

// 添加联系人

- (void)addPerson:(Person *)p;

// 返回所有的分组头即返回字典对应的所有的key值

- (NSArray *)SortedKeys;

// 从数据源中读取出所有的联系人信息

- (void)loadData;

@end

// 单例的第一步: 创建静态的自身的对象 (目的是保证实例变量在内存中存在的时间足够长)

static DataHandler *handler = nil;

@implementation DataHandler

+ (instancetype)shareInstance {

       // 这个方法是为了创建一个handler

       if (handler == nil) {

              handler = [[DataHandler alloc] init];

       }

       return handler;

}

// 懒加载

- (NSMutableDictionary *)data {

       // 这个方法是为了避免在程序刚开始运行的时候就加载太多的东西,只有当程序运行到需求位置的时候在进行加载或初始化,这样避免卡机,加快程序的运行

       if (!_data) {

              _data = [NSMutableDictionary dictionary];

       }

       return _data;

}

// 添加联系人

- (void)addPerson:(Person *)p {

       

       // 首先获取名字的拼音的首字母并将它作为key值

       NSString *key = [p.name uppercasePinYinFirstLetter];

       // 利用获取的key值去取字典中对应的数值

       NSMutableArray *array = self.data[key];

       if (!array) {

       // 如果字典中不存在对应的数值即不存在与key对应的值则进行创建

              array = [NSMutableArray array];

       }

       // 将创建的Person添加进去

       [array addObject:p];

       // 重置键值对 (防止原先字典中不存在这个键值对,为其添加上去)

       [self.data setObject:array forKey:key];

       

}

// 返回所有的分组头

- (NSArray *)SortedKeys {

       // 获取所有的key值

       NSArray *array = [self.data allKeys];

       // 将获取的所有的key值进行排序并将其返回

       return [array sortedArrayUsingSelector:@selector(compare:)];

}

// 从数据源中吧所有的联系人的信息读取出来

- (void)loadData {

       // 首先绑定一个本地的name.txt文件路径

       NSString *path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"txt"];

       // 把文件的内容读取出来

       // 把文件内容读成字符串 指定文件的编码(UTF8)encoding:NSUTF8StringEncoding

       NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

       // 首先根据回车键来获得联系人的信息

       NSArray *modelArray = [str componentsSeparatedByString:@"\n"];

       // 遍历整个modelArray

       for (NSString *personString in modelArray) {

              // 根据“-”来截取字符串分别放入对应的分组中

              NSArray *proArray = [personString componentsSeparatedByString:@"-"];

              // 拼接model类

              Person *p = [[Person alloc] init];

              // 将获取对应数组中的元素赋值到对应的model值中

              p.name = proArray[0];

              p.photo = [UIImage imageNamed:[NSString stringWithFormat:@"%@.jpg", proArray[0]]];

              p.sex = proArray[1];

              p.phoneNumber = proArray[2];

              p.address = proArray[3];

              p.word = proArray[4];

              // 将model类添加到data中

              [self addPerson:p];

       }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  101