怎样用Xcode制作手机xcode 获取通讯录录

您正在使用IE低版浏览器,为了您的IThao123账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
Xcode6 上面关于ios8系统通讯录调用的代理方法变更;
Xcode6 上面关于ios8系统通讯录调用的代理方法变更;
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊您所在的位置: &
iOS Xcode制作静态库详解
iOS Xcode制作静态库详解
一些iOS开发,有开发静态库的需求,本身iOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的框架,估计也是类似动态库的实现,不过没有具体研究过,后续继续深入研究。
注意:首先确保你的XCODE4使用IOS5,否则请下载IOS5在继续阅读。
IOS程序是由Objective-c语言构成,而是Objective-c语言中每一个类又分成&.h .m
文件。静态库可以将这些程序的类封装成一个.a文件,第三方应用程序只需要拿到这个.a文件和代码对应的.h文件即可使用静态库中封装的方法。总的来说 IOS静态库适合去制作第三方提供的SDK,废话不多说了我们直接进正题。
首先打开Xcode4创建一个静态库工程,如下图选择Framework&Library -&Cocoa Touch Static Library (创建静态库),点击右下角按钮&next&继续完成创建。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="480" height="324" style="cursor:" src="/files/uploadimg/7390.gif" alt="" />
工程创建完毕后,我们开始编写代码。我们创建一个UIView类用来显示一张图片,并且点击该视图后打开一个网址。
创建视图类的.h文件
#import&&UIKit/UIKit.h&&&&&&&&&&&@interface&MyView&:&UIView&&&&&&&&&&@end&&&
创建视图类的.m文件
显示的图片资源为通过URL下载后谷歌的LOGO,点击该LOGO视图后程序将打开百度的主页。
#import&&MyView.h&&&&@implementation&MyView&&&&&&&&&-&(id)initWithFrame:(CGRect)frame&&&&&&&{&&&&&&&&&&&&&&&&&&&&self&=&[super&initWithFrame:frame];&&&&&&&&&&&if&(self)&{&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&return&&&&&&&&}&&&&&-&(void)drawRect:(CGRect)rect&&&&&&&{&&&&&&&&&&&&&&&&&&&&UIImage&*image=[[UIImage&alloc]initWithData:[NSData&dataWithContentsOfURL:[NSURL&URLWithString:@&.hk/intl/zh-CN/images/logo_cn.png&]]];&&&&&&&&&&&[image&drawInRect:CGRectMake(0,&0,self.frame.size.width&,&self.frame.size.height)];&&&&&&&&&&&[image&release];&&&&&&&}&-(void)touchesEnded:(NSSet&*)touches&withEvent:(UIEvent&*)event&&&&&&&{&&&&&&&&&&&&&&&&[[UIApplication&sharedApplication]&openURL:[NSURL&URLWithString:@&&]];&&&&&&&}&&&@end&&&
到这一步静态库中的代码我们已经写完,现在我们开始制作静态库。静态库的制作方法可分为两种:第一种为在真机上使用的静态库,第二种为在模拟器中使用的静态库。这两种方法制作起来有点小区别,请大家一定看好了,别眨眼睛喔,
我们开始从模拟器入手。
如图,先选择模拟器iPhone 5.0 Simulator,如果你的XCODE4不是IOS5版本那么你将没有这个选项,然后Build工程,构建工程完毕后libSDKLib.a静态库文件遍生成了出来, 选择该文件鼠标右键找到它。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="480" height="294" style="cursor:" src="/files/uploadimg/7391.gif" alt="" />
找到文件以后,默认为Debug-iphoneos / libsdklib.a ,但是这个文件是不能在模拟器中使用的,并且它也不能在真机中使用。你需要选择下面Debug-iphoneosimulator / libsdklib.a这个文件,将libSDKLib.a与对应MyView.h头文件拖拽入使用它的工程当中。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="cursor:" src="/files/uploadimg/7392.gif" alt="" />
接下来创建一个普通的IOS工程,先选择模拟器运行 iPhone5.0 Simulator ,然后将libSDKLib.a 与MyView.h拖拽添加至程序当中即可。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="cursor:" src="/files/uploadimg/7393.gif" alt="" />
运行工程即可看到效果,本例中通过URL加载了一张谷歌的LOGO,触摸点击该视图后打开百度的首页。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="cursor:" src="/files/uploadimg/7394.gif" alt="" />
498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="cursor:" src="/files/uploadimg/7395.gif" alt="" />
调用静态库的方法如下:
#import&&ViewController.h&&&&&#import&&MyView.h&&&&&@implementation&ViewController&&&&-&(void)didReceiveMemoryWarning&&&&&&&&{&&&&&&&&&&&&[super&didReceiveMemoryWarning];&&&&&&&&&&&&&&&&&}&&&&&&&&&#pragma&mark&-&View&lifecycle&&&&-&(void)viewDidLoad&&&&&&&&{&&&&&&&&&&&&[super&viewDidLoad];&&&&&&&&&&&&&&&&&&&&&MyView&*myView&=&[[MyView&alloc]&initWithFrame:&CGRectMake(0,&0,&120,&100)];&&&&&&&&&&&&&&&&&&&&&[self.view&addSubview:myView];&&&&&&&&&&&&[myView&release];&&&&&&&&}&&&&-&(void)viewDidUnload&&&&&&&&{&&&&&&&&&&&&[super&viewDidUnload];&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&@end&
OK ,到这一步我们已经将静态库顺利的应用在模拟器当中,下面我们学习如何将静态库应用在真机当中。我们再次回到制作静态库的工程当中,如图打开工程后编译环境选择IOS Device,然后构建构成即可完成。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="430" height="303" style="cursor:" src="/files/uploadimg/7396.gif" alt="" />
使用鼠标右键找到libSDKlib.a,这时候Debug-iphoneos / libSDKlib.a 就是可以在真机上编辑的静态库。
最后将libSDKLib.a 与MyView.h拖拽添加至程序当中,连接上真机运行工程即可在真机上看到效果了。值得注意的是模拟器和真机用的libSDKLib.a必需要严格的区分开,否则程序会报错。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
使用 iOS 6游戏开发入门经典(第2版) ,学习为iPhone 5和新iPad构
既然强大的Android Studio来了,有什么理由不去用呢?
在经过数月以及6个测试版本的体验后,iOS 7正式版终于
微软的思路很明确。一个消费者需要拥有几款电子设备?
中秋已过,圆圆的月亮似乎是一个害羞的姑娘,带上了一
本书以Linux Redhat 9.0中文版为基础编写,从易用性和实用性角度出发主要介绍Linux Redhat 9.0中文版的应用知识,通过本书的学习
Windows Phone专家
Android开发专家
51CTO旗下网站iphone6通讯录排序方法介绍 按照拼音排序
iphone6通讯录排序方法介绍 按照拼音排序
作者:七七 来源:网络发布时间:日 11:23:50点击:1691
  今天巴士小编给小伙伴们带来的是,iphone6通讯录排序方法介绍。相信很多玩家都会有点困惑,当设备语言不是中文的时候,通讯录的排序就会变得乱七八糟。如果想按照原来首字拼音来查询,变成了全完不可能的事情。很多玩家不知道通讯录排序按照什么规则,下面和小编一起来看看游戏中,都能按照拼音的顺序来进行排序。
  iphone6通讯录排序方法介绍:
  首先玩家可以点开你手机上面的联系人,然后点击右上角的编辑这个按钮。然后在滑动到最下面。然后玩家可以点击添加字段,然后一次添加好名字拼音或者是音标。然后在将拼音输入其中就完成了所有的步骤,然后玩家在点击右上角的完成,然后就大功告成了。
  iphone6快速注音小技巧分享:
  当玩家是新建联系的时候,不要先着急输入姓名。一定要记得先添加字段,然后等所有的字段都添加好了之后。玩家在输入你的姓名,系统就会自动给姓名标注上拼音。
  如果你已经有了几百个联系人但是还没有注音的时候,玩家可以使用mac上借助xcode批量添加拼音的方法。然后玩家就可以看到你的通讯录排序的方法了。
  以上就是今天小编给小伙伴们带来的,iphone6通讯录排序方法介绍。小伙伴们通过小编上面的介绍,你们现在知道了游戏中怎么快速的排序了吗?
你有遇到过玩游戏时切换出来查看攻略,不幸导致游戏崩溃的情况吗?下载,边玩游戏边用手机看攻略,轻松愉快,大家都在用。
相关文章推荐
 ICP:皖B2- 皖公网安备05
Copyright (C)
Corporation, All Rights Reserved.怎样用Xcode制作手机通讯录_百度知道
怎样用Xcode制作手机通讯录
您的回答被采纳后将获得:
系统奖励20(财富值+经验值)+难题奖励30(财富值+经验值)
我有更好的答案
code4APP面找找类似程序自救修改
其他类似问题
为您推荐:
xcode的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁xcode IOS常用数据校验方法,验证手机号,信用卡号,电话号码,邮编,Email等 - 为程序员服务
为程序员服务
IOS常用数据校验方法,验证手机号,信用卡号,电话号码,邮编,Email等
#import &Foundation/Foundation.h&
typedef enum
IdentifierTypeKnown = 0,
IdentifierTypeZipCode,
IdentifierTypeEmail,
IdentifierTypePhone,
IdentifierTypeUnicomPhone,
IdentifierTypeQQ,
IdentifierTypeNumber,
IdentifierTypeString,
IdentifierTypeIdentifier,
IdentifierTypePassort,
IdentifierTypeCreditNumber, //10
IdentifierTypeBirthday,
}IdentifierT
@interface IdentifierValidator : NSObject
+ (BOOL) isValid:(IdentifierType) type value:(NSString*)
#import &IdentifierValidator.h&
#import &NSString+ITTAdditions.h&
int getIndex (char ch);
BOOL isNumber (char ch);
int getIndex (char ch) {
if ((ch &= '0'&& ch &= '9')||(ch &= 'a'&& ch &= 'z')||
(ch &= 'A' && ch &= 'Z')|| ch == '_') {
if (ch == '@') {
if (ch == '.') {
return -1;
BOOL isNumber (char ch)
if (!(ch &= '0' && ch &= '9')) {
return FALSE;
return TRUE;
@implementation IdentifierValidator
+ (BOOL) isValidZipcode:(NSString*)value
const char *cvalue = [value UTF8String];
int len = strlen(cvalue);
if (len != 6) {
return FALSE;
for (int i = 0; i & i++)
if (!(cvalue[i] &= '0' && cvalue[i] &= '9'))
return FALSE;
return TRUE;
+ (BOOL) validateEmail:(NSString *)candidate
NSArray *array = [candidate componentsSeparatedByString:@&.&];
if ([array count] &= 4) {
return FALSE;
NSString *emailRegex = @&[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}&;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, emailRegex];
return [emailTest evaluateWithObject:candidate];
+ (BOOL) isValidEmail:(NSString*)value {
static int state[5][3] = {
{1, -1, -1},
{3, -1, -1},
{3, -1, 4},
{4, -1, -1}
BOOL valid = TRUE;
const char *cvalue = [value UTF8String];
int currentState = 0;
int len = strlen(cvalue);
for (int i = 0; i & len && i++) {
index = getIndex(cvalue[i]);
if (index & 0) {
valid = FALSE;
currentState = state[currentState][index];
if (currentState & 0) {
valid = FALSE;
//end state is invalid
if (currentState != 4) {
valid = FALSE;
+ (BOOL) isValidNumber:(NSString*)value{
const char *cvalue = [value UTF8String];
int len = strlen(cvalue);
for (int i = 0; i & i++) {
if(!isNumber(cvalue[i])){
return FALSE;
return TRUE;
+ (BOOL) isValidPhone:(NSString*)value {
const char *cvalue = [value UTF8String];
int len = strlen(cvalue);
if (len != 11) {
return FALSE;
if (![IdentifierValidator isValidNumber:value])
return FALSE;
NSString *preString = [[NSString stringWithFormat:@&%@&,value] substringToIndex:2];
if ([preString isEqualToString:@&13&] ||
[preString isEqualToString: @&15&] ||
[preString isEqualToString: @&18&])
return TRUE;
return FALSE;
return TRUE;
+ (BOOL) isValidString:(NSString*)value
return value && [value length];
const int factor[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };//加权因子
const int checktable[] = { 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };//校验值对应表
+ (BOOL) isValidIdentifier:(NSString*)value
const int LENGTH = 18;
const char *str = [[value lowercaseString] UTF8String];
NSInteger length = strlen(str);
BOOL result = TRUE;
* identifier length is invalid
if (15 != length && LENGTH != length)
result = FALSE;
for (i = 1; i & length - 1; i++)
if(!(str[i] &= '0' && str[i] &= '9'))
result = FALSE;
if (result)
if(LENGTH == length)
if (!((str[i] &= '0' && str[i] &= '9')||str[i] == 'X'||str[i] == 'x'))
result = FALSE;
* check sum for second generation identifier
if (result && length == LENGTH)
int *ids = malloc(sizeof(int)*LENGTH);
for (i = 0; i & LENGTH; i++)
ids[i] = str[i] - 48;
int checksum = 0;
for (i = 0; i & LENGTH - 1; i ++ )
checksum += ids[i] * factor[i];
if (ids[17] == checktable[checksum%11]||
(str[17] == 'x' && checktable[checksum % 11] == 10))
free(ids);
ids = NULL;
+ (BOOL) isValidPassport:(NSString*)value
const char *str = [value UTF8String];
char first = str[0];
NSInteger length = strlen(str);
if (!(first == 'P' || first == 'G'))
return FALSE;
if (first == 'P')
if (length != 8)
return FALSE;
if (first == 'G')
if (length != 9)
return FALSE;
BOOL result = TRUE;
for (NSInteger i = 1; i & i++)
if (!(str[i] &= '0' && str[i] &= '9'))
result = FALSE;
* 常用信用卡卡号规则
* Issuer Identifier
Card Number
* Diner's Club
300xxx-305xxx, 3095xx, 36xxxx, 38xxxx
* American Express
34xxxx, 37xxxx
* MasterCard
51xxxx-55xxxx
3528xx-358xxx
* Discover
* 信用卡号验证基本算法:
* 偶数位卡号奇数位上数字*2,奇数位卡号偶数位上数字*2。
* 大于10的位数减9。
* 全部数字加起来。
* 结果不是10的倍数的卡号非法。
* prefrences link:http://www.truevue.org/licai/credit-card-no
+ (BOOL) isValidCreditNumber:(NSString*)value
BOOL result = TRUE;
NSInteger length = [value length];
if (length &= 13)
result = [IdentifierValidator isValidNumber:value];
if (result)
NSInteger twoDigitBeginValue = [[value substringWithRange:NSMakeRange(0, 2)] integerValue];
NSInteger threeDigitBeginValue = [[value substringWithRange:NSMakeRange(0, 3)] integerValue];
NSInteger fourDigitBeginValue = [[value substringWithRange:NSMakeRange(0, 4)] integerValue];
//Diner's Club
if (((threeDigitBeginValue &= 300 && threeDigitBeginValue &= 305)||
fourDigitBeginValue == 3095||twoDigitBeginValue==36||twoDigitBeginValue==38) && (14 != length))
result = FALSE;
else if([value isStartWithString:@&4&] && !(13 == length||16 == length))
result = FALSE;
//MasterCard
else if((twoDigitBeginValue &= 51||twoDigitBeginValue &= 55) && (16 != length))
result = FALSE;
//American Express
else if(([value isStartWithString:@&34&]||[value isStartWithString:@&37&]) && (15 != length))
result = FALSE;
//Discover
else if([value isStartWithString:@&6011&] && (16 != length))
result = FALSE;
NSInteger begin = [[value substringWithRange:NSMakeRange(0, 6)] integerValue];
if ((begin &= 622126 && begin &= 622925) && (16 != length))
result = FALSE;
result = TRUE;
if (result)
NSInteger digitV
NSInteger checkSum = 0;
NSInteger index = 0;
NSInteger leftI
//even length, odd index
if (0 == length%2)
index = 0;
leftIndex = 1;
//odd length, even index
index = 1;
leftIndex = 0;
while (index & length)
digitValue = [[value substringWithRange:NSMakeRange(index, 1)] integerValue];
digitValue = digitValue*2;
if (digitValue &= 10)
checkSum += digitValue/10 + digitValue%10;
checkSum += digitV
digitValue = [[value substringWithRange:NSMakeRange(leftIndex, 1)] integerValue];
checkSum += digitV
index += 2;
leftIndex += 2;
result = (0 == checkSum%10) ? TRUE:FALSE;
result = FALSE;
+ (BOOL) isValidBirthday:(NSString*)birthday
BOOL result = FALSE;
if (birthday && 8 == [birthday length])
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@&yyyyMMdd&];
NSDate *date = [formatter dateFromString:birthday];
[formatter release];
result = TRUE;
+ (BOOL) isChinaUnicomPhoneNumber:(NSString*) phonenumber
* 手机号码
* 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
* 联通:130,131,132,152,155,156,185,186
* 电信:133,,189
NSString * MOBILE = @&^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$&;
* 中国移动:China Mobile
* 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
NSString * CM = @&^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$&;
* 中国联通:China Unicom
* 130,131,132,152,155,156,185,186
NSString * CU = @&^1(3[0-2]|5[256]|8[56])\\d{8}$&;
* 中国电信:China Telecom
* 133,,189
NSString * CT = @&^1((33|53|8[09])[0-9]|349)\\d{7}$&;
* 大陆地区固话及小灵通
* 区号:010,020,021,022,023,024,025,027,028,029
* 号码:七位或八位
NSString * PHS = @&^0(10|2[0-5789]|\\d{3})\\d{7,8}$&;
NSString * PHS1 = @&^0(10|2[0-5789]|\\d{3}-)\\d{7,8}$&;
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, MOBILE];
NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, CM];
NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, CU];
NSPredicate *regextestct = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, CT];
NSPredicate *regextestphs = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, PHS];
NSPredicate *regextestphs1 = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, PHS1];
if (//([regextestmobile evaluateWithObject:phonenumber] == YES)||
([regextestcm evaluateWithObject:phonenumber] == YES)||
([regextestct evaluateWithObject:phonenumber] == YES)||
([regextestcu evaluateWithObject:phonenumber] == YES)
|| ([regextestphs evaluateWithObject:phonenumber] == YES)
|| ([regextestphs1 evaluateWithObject:phonenumber] == YES)
return YES;
return NO;
+ (BOOL) isValid:(IdentifierType) type value:(NSString*) value
if (!value ||[[value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:@&&]) {
return FALSE;
BOOL result = TRUE;
switch (type)
case IdentifierTypeZipCode:
result = [IdentifierValidator isValidZipcode:value];
case IdentifierTypeEmail:
result = [IdentifierValidator isValidEmail:value];
result = [IdentifierValidator validateEmail:value];
case IdentifierTypePhone:
result = [IdentifierValidator isValidPhone:value];
case IdentifierTypeUnicomPhone:
result = [IdentifierValidator isChinaUnicomPhoneNumber:value];
case IdentifierTypeQQ:
result = [IdentifierValidator isValidNumber:value];
case IdentifierTypeNumber:
result = [IdentifierValidator isValidNumber:value];
case IdentifierTypeString:
result = [IdentifierValidator isValidString:value];
case IdentifierTypeIdentifier:
result = [IdentifierValidator isValidIdentifier:value];
case IdentifierTypePassort:
result = [IdentifierValidator isValidPassport:value];
case IdentifierTypeCreditNumber:
result = [IdentifierValidator isValidCreditNumber:value];
case IdentifierTypeBirthday:
result = [IdentifierValidator isValidBirthday:value];
- (void) dealloc
[super dealloc];
您可能的代码
相关聚客文章
相关专栏文章

我要回帖

更多关于 手机通讯录制作 的文章

 

随机推荐