iOS 6实践指南(iOS 6 In Practice)是一本非常经典的ios6开发书籍,该书籍内容完整详细、全面,非常适合初学ios开发的朋友们使用,该书籍中的案例都比较实际,具有使用性,在这本书中读者们可以了解简单工程的建立流程,有需要的朋友们就赶紧来下载查阅吧!
iOS 6实践指南(iOS 6 In Practice)内容截图
iOS 6实践指南(iOS 6 In Practice)内容节选
第一章、开始 iOS 开发……………………………………………………………………………3
第二章、 创建一个 iOS应用…………………………………………………………………………20
第三章、通过教你制作一个上架应用 PicDecor 来教你使用 view controllers 以及创建展示图
片………………………………………………………………………………………………31
第 四 章 、 通 过 教 你 制 作 一 个 上 架 应 用 Dial4 来 学 习 访 问 地 址 簿 / 联 系 人 列
表………………………………………………………………………………………………97
第 五 章 、 通 过 教 你 制 作 一 个 上 架 应 用 WhereISMyCar 来 学 习 MapKit 和 照 相 机 功
能……………………………………………………………………………………………132
第六章、通过教你制作一个上架应用 TimeDown 来学习设置 ,音频,以及晃动检
测………………………………………………………………………………………174
第七章、通过教你制作一个上架应用 Playlist 来学习 CoreData, 获取本地音乐并播
放………………………………………………………………………………………205
第八章、通过教你制作一个上架应用石头,剪子,布来学习推送通知和应用内置购
买…………………………………………………………………………………………240
第 九 章 、 给 石 头 , 剪 子 , 布 游 戏 添 加 Game Center 排 行 榜 以 及 成
就……………………………………………………………………………………………280
第十章、通过教你制作一个上架应用 MusicSearch 来学习 iTunes API,iPad 适配,以及
iAd……………………………………………………………………………………………315
第十一章、通过制作一个上架应用 MeetSocial 学习集合视图,社交功能,提醒事项以及应用状
态存储……………………………………………………………………………………………351
……
Organizer 可以通过使用 commard 键+点击代码中的文本, 可以组织和和文本相关的文件。同时,Organizer 可以让你访问有用的文件比如说“Apple Human InterfaceGuidelines《苹果人机交互指南》 ”以及“Learning Objective-C:A Primer“ 《学习Objective-C,入门指导》 ” 。这两个文件都推荐你阅读。
现在已经大概了解了 Xcode 和它的开収环境,让我们来创建一个应用吧!
1.3Hello World 应用
作为探索 Xcode 以及了解 iOS 开収的一种方式,让我们先来创建一个基础的应用。这丌需要花费很多工作,但是可以帮劣你了解创建应用的基础。
首先,你可以创建一个新的工程,创建工程包括几个关键的步骤。然后你可以给应用创建 UI,然后运行应用。
1.3.1 创建一个新的工程
打开 Xcode,选择 Create a New Project(见图 1.8) 。
阅读iOS 6实践指南(iOS 6 In Practice)心得体会
第四章介绍了一个快速搜索联系人的应用Dial4,下面是学到的知识点:
1.使用地址簿
几乎所有地址簿中的数据都是CFTypeRef的子类,而且要使用这些数据的方法也和以前不同。
需要添加的框架:AddressBook.framework
包含头文件:#import
2.获取地址簿的引用:ABAddressBookRef addressBook = ABAddressBookCreate();3.判断用户是否允许使用地址簿中的内容,此方法中包含了iOS6中的新特性,书中的源代码在注释掉这个方法后,在iOS5.1的模拟器上可以运行了。对允许使用地址簿资料的授权和对允许使用相册、日历、提醒事顷的授权都是在iOS6中才加入的,所以要注意向前和向后兼容性。
ABAuthorizationStatus authStatus =
ABAddressBookGetAuthorizationStatus();
if (authStatus != kABAuthorizationStatusAuthorized){
ABAddressBookRequestAccessWithCompletion
(addressBook, ^(bool granted, CFErrorRef error){
dispatch_async(dispatch_get_main_queue(), ^{if (error)
NSLog(@"Error: %@", (__bridge NSError *)error);else if (!granted) {
UIAlertView *av = [[UIAlertView alloc]
initWithTitle:@"Authorization Denied"
message:@"Set permissions in Settings>General>Privacy."delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"OK", nil];
[av show];
}
else
{
ABAddressBookRevert(addressBook);
myContacts = [NSArray arrayWithArray:
(__bridge_transfer NSArray*)
ABAddressBookCopyArrayOfAllPeople(addressBook)];[tableView reloadData];
}
});
});
}
return authStatus == kABAuthorizationStatusAuthorized;如果返回值为kABAuthorizationStatusAuthorized就表示用户已经授权允许了,返回的值可以作为if的条件进行判断。
4.从地址簿中获取联系人数据并存入数组里
NSArray *myContacts = [NSArray arrayWithArray:(__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook)];5.从存联系人数组中读取数据
5.1,读取联系人头像图片:
NSData *d = (__bridge_transfer NSData*)ABPersonCopyImageData(objc_unretainedPointer([myContacts objectAtIndex:indexPath.row]));if (nil != d)
{
UIImage *i = [UIImage imageWithData:d];
[[cell imageView] setImage:i];
}
5.2获取地址簿中以组形式存在的数据
像电话号码和电子邮件这种数据都是以组形式存在的,因为一个联系人通常都有超过一个电话号码戒者电子邮箱。我们必项以组的形式来获取这些数据。当获得了其中一组数据的时候,可以用编号来获取其中的任何一顷数据。
要获取这些以组形式存在的数据,首先要将他们复制到ABMultiValueRef中(请看下面的代码中的第三个注明)。当把组形式的数据复制到ABMultiValueRef后,就可以把其中任何一顷数据用相应编号复制出来了。使用ABMultiValueGetCount方法可以知道有多少个顷目在一个组里面。
-(NSString*)personDisplayText:(ABRecordRef)person{
// ABRecordRef person = [[myContacts objectAtIndex:rowIndex] retain];NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);NSString *lastName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);NSString *fullName = nil;
if (firstName || lastName)
{
if (ABPersonGetCompositeNameFormat() == kABPersonCompositeNameFormatFirstNameFirst)fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];else
fullName = [NSString stringWithFormat:@"%@, %@", lastName, firstName];}
else
{
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,kABPersonPhoneProperty);
if (phoneNumbers && ABMultiValueGetCount(phoneNumbers) > 0){
fullName = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);CFRelease(phoneNumbers);
}
}
// CFRelease(person);
return fullName;
}
除了电话号码外,另外两个数据也是以组存在的,那就是地址和电子邮箱,它们对应的值分别是kABPersonEmailProperty和kABPersonAddressProperty。这些值也附带了相应标识,比如家庭、工作、戒者其他什么的。如果需要其中特定的某一个,可以对ABMultiValueRef使用ABMultiValueCopyLabelAtIndex方法,只需要传入编号,就会返回相应位置数据的标识。而这个标识可以用来和kABWorkLabel、kABHomeLabel以及kABOtherLabel迚行比较(请看下面的代码)。当然这个例子的主要目的是为了教你如何从组数据中找出某顷数据,在这个应用中用丌着。
从几个不同的电子邮箱地址中找出工作的电子邮箱地址NSString *retVal = nil;
ABRecordRef person = [myContacts objectAtIndex:rowIndex];ABMultiValueRef vals =
ABRecordCopyValue(person, kABPersonEmailProperty);if (ABMultiValueGetCount(vals) > 0)
{
CFIndex i;
for (i=0; i < ABMultiValueGetCount(vals); i++){
CFStringRef label = ABMultiValueCopyLabelAtIndex(vals, i);if (retVal == nil ||
CFStringCompare(label, kABWorkLabel, 0)
== kCFCompareEqualTo) //考虑用户对姓和名顸序的偏好{
} }
CFStringRef val = ABMultiValueCopyValueAtIndex(vals, i);retVal = (NSString *)val;
CFRelease(val);
}
CFRelease(label);
CFRelease(vals);
return retVal;
从程序角度来说,用iPhone打电话是超级简单的事情。有好几个URL都是SDK自劢支持的。比如tel:是用来打电话的,mailto:是用来发送邮件的,sms:是用来发送短信的,http:是用来访问网站的,map:是用来打开地图的。NSString *url = [NSString stringWithFormat:@"tel:%@", phoneNum]; [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:url]];取出电话号码等信息:
-(void)handleRowSelection:(int)rowIndex
{
ABRecordRef person = objc_unretainedPointer([myContacts objectAtIndex:rowIndex]);ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,kABPersonPhoneProperty);
if (ABMultiValueGetCount(phoneNumbers) == 1)[self callThisNumber:(__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0)];else if (ABMultiValueGetCount(phoneNumbers) > 1){
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Pick A Number"message:@"Which number would you like to call?"delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
for (int i=0; i < ABMultiValueGetCount(phoneNumbers); i++)[av addButtonWithTitle:(__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, i)];[av show];
}
if (phoneNumbers)
CFRelease(phoneNumbers);
}
更多免费文档资料下载,敬请关注东坡下载站!
- PC官方版
- 安卓官方手机版
- IOS官方手机版