Tải bản đầy đủ (.pdf) (29 trang)

Code standard iOS Lập trình di động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (264.77 KB, 29 trang )

iPad%
iPhone%
iPod%touch%
%
!
!
!
!
!iOS!!
Development!
!
!
!
!
!
!
!
!
!
By#Dani#Arnaout#
#
#
"!#$%&&'()!*+,%-+(,+./&0!
"1234')!*+,%-+(,+./&0!
"56+%7)!*+,%8+(,+./&97%:'8;.60!
"<./&/='!;>+,,'7)!4(.?(+66%,?&/&.(@0!
!
!
!
!
!


!
!
A'(B%.,!C8@!
!
D!
Table#of#Contents:#
#
Page!3)!EFG+='7! !
Page!4)!EFH/&&.,!!
Page!4)!EF1'?6',&'*I.,&(.7! !
Page!5)!EF#'J&K%'7*!
Page!5)!EF17%*'(!
Page!5:!EF1$%&;>!
Page!6)!EFL;&%:%&3M.,%&.(!
Page!6)!EFN(.?('BBH+(!
Page!7)!EFN+?'I.,&(.7!
Page!9)!EF1&'44'(!
Page!10)!EF#+=7'A%'$!
Page!12)!EFF6+?'A%'$!
Page!12)!EF#'J&A%'$!
Page!13)!EFO'=A%'$!
Page!13)!MPM+4P%&!
Page!15)!EFQ+&'N%;2'(!
!
Page!16)!EF#+4R'B&/('S';.?,%T'(!
Page!17)!EFN%,;>R'B&/('S';.?,%T'(!
Page!17)!EFS.&+&%.,R'B&/('S';.?,%T'(!
Page!17)!EF1$%4'R'B&/('S';.?,%T'(!
Page!17)!EFN+,R'B&/('S';.?,%T'(!
Page!17)!EFG.,?N('BBR'B&/('S';.?,%T'(!

!
Page!18)!U1#%6'(!
Page!18:!EFL7'(&A%'$!
Page!19)!EFL;&%.,1>''&!
!
Page!20:!L/*%.!
Page!21)!S';.(*%,?!
Page!24)!M+%7!I.64.B'(!
Page!24)!L/&.VM'&>.*!I+77!
Page!24)!L,%6+&%.,!
Page!25)!Q+&+!N'(B%B&',;'!
Page!29)!1/=B&(%,?B!
Page!29)!1&.(3=.+(*!
!
!
!
!
!
W!
I.!UILabel:!
!
(The%following%examples%apply%to%a%UILabel%called%myLabel)%
!
• text:%%%%
The$text$displayed$by$the$label.$$
!
"#$%&'()*'+*!,! /'+*.0!
!
• textAlignment%
The$technique$to$use$for$aligning$the$text.$

!
1(%&'(!2'*/'+*3(456"'6*789/'+*3(456"'6*$':*;0!
!
also7!89/'+*3(456"'6*<45=*!
!89/'+*3(456"'6*>'6*'?!
!
• textColor%
The$color$of$the$text.$
!
"#$%&'()*'+*>@(@?,189>@(@?!&(A'>@(@?;0$!
!
• backgroundColor%
The$color$of$the$text.$
!
"#$%&'()&%BC5?@A6D>@(@?,189>@(@?!?'D>@(@?;0!
!
• font%
The$font$of$the$text.$
!
1"#$%&'(!2'*E@6*7189E@6*!:@6*F4*=G%"'7-H3?4%(H!24I'7JK;;0!
%
• alfa%
Set$the$alfa$of$the$text.$
!
"#$%&'()%(:%!,!L)M0!
N/=42!%OO(4'2!*@!%((!@*='?!89!'('"'6*2!*@@P!
!
• hidden%
Hide$or$show$the$text.$
!

Q#(%&'()=4DD'6!,!RST0!
N/=42!%OO(4'2!*@!%((!@*='?!89!'('"'6*2!*@@P!
!
%
!
X!
II.!UIButton :!
!
(The%following%examples%apply%to%a%UIButton%called%myButton)%
!
!
• setTitle:%forState:%
The$title$used$for$specified$state.$
!
1"#UA**@6!2'*/4*('7 ='((@.!:@?T*%*'789>@6*?@(T*%*'G@?"%(;0!
!
also7!89>@6*?@(T*%*'V45=(45=*'D!
!89>@6*?@(T*%*'W42%&('D!
!89>@6*?@(T*%*'T'('B*'D!
!
!
• setTitleColor:%forState:%
The$color$of$the$button’s$title.$
!
1"#UA**@6!2'*/4*('>@(@?7189>@(@?!U(A'>@(@?;!
:@?T*%*'789>@6*?@(T*%*'T'('B*'D;0!
!
• setBackgroundImage:%forState:%
The$image$of$the$button’s$background.$
!

"#$%&'()&%BC5?@A6D>@(@?,189>@(@?!?'D>@(@?;0!
!
• titleLabel.font%
The$font$of$the$button’s$title.$
!
"#UA**@6)*4*('$%&'():@6*!,!189E@6*!:@6*F4*=G%"'7-H3?4%(H!24I'7JK;0!
!
set!images!for!states:!
1&A**@6!2'*9"%5'71899"%5'!4"%5'G%"'D7-H6@?"%()O65H;!
:@?T*%*'789>@6*?@(T*%*'G@?"%(;0!
1&A**@6!2'*9"%5'71899"%5'!4"%5'G%"'D7-HO?'22'D)O65H;!
:@?T*%*'789>@6*?@(T*%*'V45=(45=*'D;0!
!
III.!UISegme nt ed Co n tr ol:!
!
(The%following%examples%apply%to%a%UISegmentedControl%called%mySegmentedControl)%

4:!N"#T'5"'6*'D>@6*?@()2'('B*'DT'5"'6*96D'+!,,LP!!GT$@5N-HV9HP0!

!
!
Y!
!
!
!

IV.!UIText Fi eld:!
!
(The%following%examples%apply%to%a%UITextField%called%myTextField)%
!

• Using%a%text%field:%
Connect$an$instance$of$UITextField$to$.h$file$then$implement$
using$the$following$code$.$
!
myTextField.text=@"hi";
"#/'+*E4'(D)O(%B'=@(D'?,-HS6*'?!#@A?!6%"'H0!
"#/'+*E4'(D)B('%?UA**@6Q@D'!,!89/'+*E4'(DX4'YQ@D'3(Y%#20!
!
%(2@7!
89/'+*E4'(DX4'YQ@D'G'Z'?!
89/'+*E4'(DX4'YQ@D'F=4('SD4*465!
89/'+*E4'(DX4'YQ@D'86('22SD4*465!
!
U@@(!3**?4&A*'27!
! "#/'+*E4'(D)=%2/'+*0!
!!!!!"#/'+*E4'(D)=45=(45=*'D0!
!!!!!"#/'+*E4'(D)=4DD'60!
!!!!!"#/'+*E4'(D)42SD4*4650!
!
!
V.!UISlider:!
!
(The%following%examples%apply%to%a%UISlider%called%mySlider)%
!
• Creating%a%slider:%
Connect$an$instance$of$UISlider$to$.h$file$then$implement$using$
the$following$code$.$
!
"#T(4D'?)"464"A"X%(A'!,!L)L0!
"#T(4D'?)"%+4"A"X%(A'!,!JLL)L0!

!!!!!
GTT*?465![2(4D'?X%(A'!,!1GTT*?465!2*?465F4*=E@?"%*7-H\:H]"#T(4D'?)Z%(A';0!
!
VI.!UISwitch:!
!
(The%following%examples%apply%to%a%UISwitch%called%mySwitch)%

if (mySwitch.on == YES) NSLog(@”Switch is ON”);
!
Z!
!
!
!
VII.!UIActivityIndicator:!
!
(The%following%examples%apply%to%a%UIActivityIndicator%called%myActivityIndicator)%

start%animating:%
1"#3B*4Z4*#96D4B%*@?!2*%?*364"%*465;0!
!
Stop%animating:%
1"#3B*4Z4*#96D4B%*@?!2*@O364"%*465;0!
!
Check%if%it’s%animating:%
4:!N"#3B*4Z4*#96D4B%*@?)42364"%*465P!GT$@5N-H9*!42!%64"%*465HP0!
!
Change%its%style:%
"#3B*4Z4*#96D4B%*@?)%B*4Z4*#96D4B%*@?X4'YT*#('!,!
893B*4Z4*#96D4B%*@?X4'YT*#('F=4*'0!
!

also%available:!893B*4Z4*#96D4B%*@?X4'YT*#('F=4*'$%?5'0!
! ! ! ! 893B*4Z4*#96D4B%*@?X4'YT*#('^?'#0!


VIII.!UIProgressView:!
!
(The%following%examples%apply%to%a%UIProgressView%called%myProgressView)%

set%progress%value:%
1"#_?@5?'22X4'Y!2'*_?@5?'227J)L!%64"%*'D7RST;0!
!
get%the%value%of%the%progressView%and%save%it%in%a%%%
:(@%*!%,!"#_?@5?'22X4'Y)O?@5?'220!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
[!

!
!
VIII.!UIPageControl:!
!
Add%this%to%your%.h%
!
-46*'?:%B'!TB?@((465X4'Y>@6*?@(('?!7!89X4'Y>@6*?@(('?!
`89TB?@((X4'YW'('5%*'a!
b!
!!!!Ucc$!O%5'>@6*?@(92>=%65465_%5'0!
d!
-O?@O'?*#!N?'*%46]!6@6%*@"4BP!9UcA*('*!89TB?@((X4'Y![2B?@((X4'Y0!
!
-O?@O'?*#!N?'*%46]!6@6%*@"4BP!9UcA*('*!89_%5'>@6*?@(![O%5'>@6*?@(0!
!
e[!:@?!O%5'>@6*?@(![e!
f!N9U3B*4@6PB=%65'_%5'7N4DP2'6D'?0!
!
e[!46*'?6%(![e!
f!NZ@4DP2'*AO_%5'0!
!
-'6D!
!
Add%this%to%your%.m%
!
f!NZ@4DP2'*AO_%5'!
b!
2B?@((X4'Y)D'('5%*'!,!2'(:0!
!
12'(:)2B?@((X4'Y!2'*U%BC5?@A6D>@(@?7189>@(@?!&(%BC>@(@?;;0!

12B?@((X4'Y!2'*>%6>%6B'(>@6*'6*/@AB='27Gc;0!
! !
2B?@((X4'Y)46D4B%*@?T*#('!,!89TB?@((X4'Y96D4B%*@?T*#('F=4*'0!
2B?@((X4'Y)B(4O2/@U@A6D2!,!RST0!
2B?@((X4'Y)2B?@((S6%&('D!,!RST0!
2B?@((X4'Y)O%5465S6%&('D!,!RST0!
! !
GT896*'5'?!64"%5'2!,!L0!
>^E(@%*!B+!,!L0!
:@?!N0!0!64"%5'2ggP!b!
GTT*?465![4"%5'G%"'!,!1GTT*?465!2*?465F4*=E@?"%*7-H4"%5'\D)hO5H]!N64"%5'2!
g!JP;0!
899"%5'![4"%5'!,!1899"%5'!4"%5'G%"'D74"%5'G%"';0!
4:!N4"%5'!,,!64(P!b!
! !! &?'%C0d!
899"%5'X4'Y![4"%5'X4'Y!,!11899"%5'X4'Y!%((@B;!464*F4*=9"%5'74"%5';0!
>^<'B*!?'B*!,!4"%5'X4'Y):?%"'0!
?'B*)24I')='45=*!,!4"%5')24I')='45=*0!
?'B*)24I')Y4D*=!,!4"%5')24I')Y4D*=0!
!
\!
?'B*)@?4546)+!,!NN2B?@((X4'Y):?%"')24I')Y4D*=!f!4"%5')24I')Y4D*=P!e!iP!g!
B+0!
?'B*)@?4546)#!,!NN2B?@((X4'Y):?%"')24I')='45=*!f!4"%5')24I')='45=*P!e!iP0!
4"%5'X4'Y):?%"'!,!?'B*0!
12B?@((X4'Y!%DDTA&Z4'Y74"%5'X4'Y;0!
14"%5'X4'Y!?'('%2';0!
B+!g,!2B?@((X4'Y):?%"')24I')Y4D*=0!
! d!
2'(:)O%5'>@6*?@()6A"&'?c:_%5'2!,!64"%5'20!

12B?@((X4'Y!2'*>@6*'6*T4I'7>^T4I'Q%C'NB+]!12B?@((X4'Y!
&@A6D2;)24I')='45=*P;0!
d!
!
f!NZ@4DP2B?@((X4'YW4DTB?@((7N89TB?@((X4'Y![Pj2B?@((X4'Y!
b!
!!!!4:!NO%5'>@6*?@(92>=%65465_%5'P!b!
!!!!!!!!?'*A?60!
!!!!d!
!
! e[!
! ![! F'!2Y4*B=!O%5'!%*!ML\!%B?@22!
! ![e!
>^E(@%*!O%5'F4D*=!,!j2B?@((X4'Y):?%"')24I')Y4D*=0!
46*!O%5'!,!:(@@?NNj2B?@((X4'Y)B@6*'6*c::2'*)+!f!O%5'F4D*=!e!iP!e!
O%5'F4D*=P!g!J0!
!!!!O%5'>@6*?@()BA??'6*_%5'!,!O%5'0!
d!
!
f!NZ@4DP2B?@((X4'YW4DS6DW'B'('?%*4657N89TB?@((X4'Y![Pj2B?@((X4'Y!!
b!
!!!!O%5'>@6*?@(92>=%65465_%5'!,!Gc0!
d!
!
kO?%5"%!"%?C!f!
kO?%5"%!"%?C!_%5'>@6*?@(!2*A::!
f!N9U3B*4@6PB=%65'_%5'7N4DP2'6D'?!!
b!
! e[! >=%65'!*='!2B?@((!Z4'Y[e!
!!!!>^<'B*!:?%"'!,!2B?@((X4'Y):?%"'0!

!!!!:?%"')@?4546)+!,!:?%"')24I')Y4D*=![!O%5'>@6*?@()BA??'6*_%5'0!
!!!!:?%"')@?4546)#!,!L0!
!!!!12B?@((X4'Y!2B?@((<'B*/@X424&('7:?%"'!%64"%*'D7RST;0!
! e[!
! ![! F='6!*='!%64"%*'D!2B?@((465!:4642=4652]!
2B?@((X4'YW4DS6DW'B'('?%*465!Y4((!*A?6!*=42!@::!
! ![e!
!!!!O%5'>@6*?@(92>=%65465_%5'!,!RST0!
d!
-'6D!
!
]!
!
IX.!UIStepp er :!
!
!
(The%following%examples%apply%to%a%UIStepper%called%myStepper)%
!
!
• Using%a%stepper:%
Connect$an$instance$of$UIStepper$to$.h$file$then$implement$using$
the$following$code$.$
!
You%can%set%Current,%Min,%Max,%&%Step%values%for%your%stepper%from%the%
properties%menu.%
!
!
To%get%the%value%of%myStepper:%
"#T*'OO'?)Z%(A'!N?'*A?6!*#O'!7!Wc8U$SP!
!

To%get%the%value%in%the%form%of%a%string:%
GTT*?465![=4!,!1GTT*?465!2*?465F4*=E@?"%*7-H\4H]N46*P"#T*'OO'?)Z%(A';0!
!
%
//"Set"min"and"max%
!!1"#T*'OO'?!2'*Q464"A"X%(A'7L;0!
!!1"#T*'OO'?!2'*Q%+4"A"X%(A'7ll;0!
!
//"To"change"the"increment"value"for"each"step%
%%//"(default"is"1)%
!!1"#T*'OO'?!2'*T*'OX%(A'7JL;0!
!
//%Set%current%value%
1"#T*'OO'?!X%(A'7L;0!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!

!
C@!
!
X.!UITableViews:!
How%to%create%a%static%table:%
1)%Create%a%view%that%sublasses%from%UITableView%(you%will%get%extra%methods%
ready%for%you%to%implement)%
2) Create%a%global%Array%in%.h%file:%
-46*'?:%B'!*%&('2!7!89/%&('X4'Y>@6*?@(('?!
! b!GT3??%#!["#$42*0d!
! -'6D!
3) Initialize%the%array%in%the%your%viewDidLoad:%
"#$42*!,!1GT3??%#!%??%#F4*=c&h'B*27-H@6'H]-H*Y@H]-H*=?''H]64(;0!
!
4) We%have%to%implement%three%methods%
a)number%of%sections%(usually%1)%
%
!
f!NGT96*'5'?P6A"&'?c:T'B*4@6296/%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!
b!
ee!<'*A?6!*='!6A"&'?!@:!2'B*4@62)!
!!!!?'*A?6!J0!
d!
!
!
b)%number%of%rows%in%each%section%(we%calculate%the%elements%of%the%array%
by%using%a%ready%method).%
!
f!NGT96*'5'?P*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!
6A"&'?c:<@Y296T'B*4@67NGT96*'5'?P2'B*4@6!

b!
ee!<'*A?6!*='!6A"&'?!@:!?@Y2!46!*='!2'B*4@6)!
!!!!?'*A?6!1"#$42*!B@A6*;0!
d!
!
c)Assigning%the%array%elements%as%the%row%cells%titles%
!
!
f!N89/%&('X4'Y>'((![P*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!
B'((E@?<@Y3*96D'+_%*=7NGT96D'+_%*=![P46D'+_%*=!
b!
2*%*4B!GTT*?465![>'((9D'6*4:4'?!,!-H>'((H0!
!!!!!
89/%&('X4'Y>'((![B'((!,!1*%&('X4'Y!
D'mA'A'<'A2%&('>'((F4*=9D'6*4:4'?7>'((9D'6*4:4'?;0!
!!!!4:!NB'((!,,!64(P!b!
!B'((!,!1189/%&('X4'Y>'((!%((@B;!464*F4*=T*#('789/%&('X4'Y>'((T*#('W':%A(*!
?'A2'9D'6*4:4'?7>'((9D'6*4:4'?;0!
!!!!d!!!!
!B'(()*'+*$%&'()*'+*!,!1"#$42*!@&h'B*3*96D'+7146D'+_%*=!?@Y;;0!
!!!!?'*A?6!B'((0!
!
CC!
d!
!
TABLE%VIEWS:%EXTRA%HELPFUL%METHODS:%
!
e[!
ee!cZ'??4D'!*@!2AOO@?*!B@6D4*4@6%(!'D4*465!@:!*='!*%&('!Z4'Y)!
f!NUcc$P*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!

B%6SD4*<@Y3*96D'+_%*=7NGT96D'+_%*=![P46D'+_%*=!
b!
!!!!ee!<'*A?6!Gc!4:!#@A!D@!6@*!Y%6*!*='!2O'B4:4'D!4*'"!*@!&'!'D4*%&(')!
!!!!?'*A?6!RST0!
d!
[e!
!
e[!
ee!cZ'??4D'!*@!2AOO@?*!'D4*465!*='!*%&('!Z4'Y)!
f!NZ@4DP*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!
B@""4*SD4*465T*#('7N89/%&('X4'Y>'((SD4*465T*#('P'D4*465T*#('!
:@?<@Y3*96D'+_%*=7NGT96D'+_%*=![P46D'+_%*=!
b!
!!!!4:!N'D4*465T*#('!,,!89/%&('X4'Y>'((SD4*465T*#('W'('*'P!b!
!!!!!!!!ee!W'('*'!*='!?@Y!:?@"!*='!D%*%!2@A?B'!
!!!!!!!!1*%&('X4'Y!D'('*'<@Y23*96D'+_%*=271GT3??%#!
%??%#F4*=c&h'B*746D'+_%*=;!Y4*=<@Y364"%*4@6789/%&('X4'Y<@Y364"%*4@6E%D';0!
!!!!d!!!!
!!!!'(2'!4:!N'D4*465T*#('!,,!89/%&('X4'Y>'((SD4*465T*#('962'?*P!b!
!!!!!!!!ee!>?'%*'!%!6'Y!462*%6B'!@:!*='!%OO?@O?4%*'!B(%22]!462'?*!4*!46*@!
*='!%??%#]!%6D!%DD!%!6'Y!?@Y!*@!*='!*%&('!Z4'Y!
!!!!d!!!!
d!
[e!
!
e[!
ee!cZ'??4D'!*@!2AOO@?*!?'%??%65465!*='!*%&('!Z4'Y)!
f!NZ@4DP*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!"@Z'<@Y3*96D'+_%*=7NGT96D'+_%*=!
[P:?@"96D'+_%*=!*@96D'+_%*=7NGT96D'+_%*=![P*@96D'+_%*=!
b!

d!
[e!
!
e[!
ee!cZ'??4D'!*@!2AOO@?*!B@6D4*4@6%(!?'%??%65465!@:!*='!*%&('!Z4'Y)!
f!NUcc$P*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!
B%6Q@Z'<@Y3*96D'+_%*=7NGT96D'+_%*=![P46D'+_%*=!
b!
!!!!ee!<'*A?6!Gc!4:!#@A!D@!6@*!Y%6*!*='!4*'"!*@!&'!?'f@?D'?%&(')!
!!!!?'*A?6!RST0!
d!
[e!
!
CD!
!
kO?%5"%!"%?C!f!/%&('!Z4'Y!D'('5%*'!
!
f!NZ@4DP*%&('X4'Y7N89/%&('X4'Y![P*%&('X4'Y!
D4DT'('B*<@Y3*96D'+_%*=7NGT96D'+_%*=![P46D'+_%*=!
b!
!!!!ee!G%Z45%*4@6!(@54B!"%#!5@!='?')!>?'%*'!%6D!OA2=!%6@*='?!Z4'Y!
B@6*?@(('?)!
!!!!e[!
!!!!!`kW'*%4(X4'Y>@6*?@(('?ka![D'*%4(X4'Y>@6*?@(('?!,!
11`kW'*%4(X4'Y>@6*?@(('?ka!%((@B;!464*F4*=G4&G%"'7-H`kG4&!6%"'kaH!
&A6D('764(;0!
!!!!!ee!)))!
!!!!!ee!_%22!*='!2'('B*'D!@&h'B*!*@!*='!6'Y!Z4'Y!B@6*?@(('?)!
!!!!!12'(:)6%Z45%*4@6>@6*?@(('?!OA2=X4'Y>@6*?@(('?7D'*%4(X4'Y>@6*?@(('?!
%64"%*'D7RST;0!

!!!!![e!
d!
!
!
!
!
XI.!UIImageView:!
!
(The%following%examples%apply%to%a%UIImageView%called%myImage)%
make%sure%you%use%.png%images%

"#9"%5')4"%5'!,!1899"%5'!4"%5'G%"'D7-H4"%5'JH;0!
!
!
XII.!UITextView:!
!
(The%following%examples%apply%to%a%UITextView%called%myTextView)%

!!!"#/'+*X4'Y)'D4*%&('!,!Gc0!
!!!"#/'+*X4'Y)*'+*!,!-HV9H0!
!
!
N/=42!42!A2'D!:@?!"A(*4O('!(46'2!@:!*'+*!Y4*=!2B?@((%&('!%&4(4*#)!T@!4:!
*='!*'+*!42!*@@!(%?5'!:@?!*='!2B?''6]!#@A!B%6!2B?@((!D@Y6!*@!5'*!2@"'!"@?'!
2O%B'!:@?!%!6'Y!*'+*P!
!
!
!
!
!

!
!
!
CW!
!
XIII.!UIWebView:!
(The%following%examples%apply%to%a%UIWebView%called%myWebView)%
• Displaying%a%web%page:%
Connect$an$instance$of$UIWebView$to$.h$file$then$implement$using$
the$following$code$.$
!
GT8<$![A?(!,!1GT8<$!8<$F4*=T*?4657-H=**O7eeYYY)&%A)'DA)(&H;0!!
GT8<$<'mA'2*![?'m!,!1GT8<$<'mA'2*!?'mA'2*F4*=8<$7A?(;0!!
1Y'&X4'Y!(@%D<'mA'2*7?'m;0!
!
!
ee^S/!8<$!E<cQ!FSUX9SF7!
NSString *currentURL= myWebView.request.URL.absoluteString;
!
ee^'*!2@A?B'!B@D'!@:!*='!O%5'7!
NSString *source = [webView
stringByEvaluatingJavaScriptFromString:

@"document.getElementsByTagName('html')[0].outerHTML"];!
!
XIV.%MKMapView:%
%
$(The$following$examples$apply$to$a$MKMapView$called$mapView)$
• Displaying%a%map:%
Import$the$Map$framework.$

Connect$an$instance$of$MKMapView$to$.h$file$then$implement$using$
the$following$code$.$
Add$the$following$line$to$your$.h$file:$
k4"O@?*!`Q%On4*eQ%On4*)=a$
!
ee>?'%*'!?'54@6!N^'*!B@@?D46%*'D!:?@"!^@@5('!Q%O2P!
!!!!"%OX4'Y)"%O/#O',!QnQ%O/#O'T%*'((4*'0!
!!!!Qn>@@?D46%*'<'54@6!6'Y<'54@60!
!!!!6'Y<'54@6)B'6*'?)(%*4*AD'!,!oo)pqMroM0!
!!!!6'Y<'54@6)B'6*'?)(@654*AD'!,!oM)rppiKJ0!
!!!!6'Y<'54@6)2O%6)(%*4*AD'W'(*%!,!L)LLirJJ0!
!!!!6'Y<'54@6)2O%6)(@654*AD'W'(*%!,!L)LLrMqp0!
!
eeW42O(%#!*='!B?'%*'!s6'Y<'54@6t!@6!*='!Z4'Y!
!!!12'(:)"%OX4'Y!2'*<'54@676'Y<'54@6!%64"%*'D7RST;0!
!
• Placing%a%pin%on%the%map:%
ee>?'%*'!B@@?D46%*'!*='6!%22456!4*!*@!%!O46!
>$$@B%*4@6>@@?D46%*'iW!B@@?D46%*'0!
!!!!B@@?D46%*')(%*4*AD'!,!oo)pqMroM0!
!!!!B@@?D46%*')(@654*AD'!,!oM)rppiKJ0!
!
CX!
!!!!!
ee>?'%*'!_46!
Qn_@46*366@*%*4@6![%66@*%*4@6!,!11Qn_@46*366@*%*4@6!%((@B;!464*;0!
!
ee322456!*='!B@@?D46%*'2!Y'tZ'!B?'%*'D!*@!*='!O46!
!!!!1%66@*%*4@6!2'*>@@?D46%*'7B@@?D46%*';0!
ee^4Z'!*='!O46!%!*4*('!!!

!!1%66@*%*4@6!2'*/4*('7-HQ#!_46H;0!
ee_(%B'!O46!@6!*='!"%O!
12'(:)"%OX4'Y!%DD366@*%*4@67%66@*%*4@6;0!
• Disclosure%button%beside%the%pin’s%title:%
f!NQn366@*%*4@6X4'Y![P"%OX4'Y7NQnQ%OX4'Y![P"%OX4'Y!Z4'YE@?366@*%*4@67N4D!
`Qn366@*%*4@6aP%66@*%*4@6!b!
!!!!Qn_46366@*%*4@6X4'Y![O46X4'Y!,!NQn_46366@*%*4@6X4'Y![P1"%OX4'Y!
D'mA'A'<'A2%&('366@*%*4@6X4'YF4*=9D'6*4:4'?7-HO46X4'YH;0!
!!!!4:!NuO46X4'YP!b!
!!!!!!!!O46X4'Y!,!11Qn_46366@*%*4@6X4'Y!%((@B;!464*F4*=366@*%*4@67%66@*%*4@6!
?'A2'9D'6*4:4'?7-HO46X4'YH;0!
!!!!!!!!O46X4'Y)O46>@(@?!,!Qn_46366@*%*4@6>@(@?<'D0!
!!!!!!!!O46X4'Y)%64"%*'2W?@O!,!RST0!
!!!!!!!!O46X4'Y)B%6T=@Y>%((@A*!,!RST0!
!!!!!!!!!
!!!!!!!!89UA**@6![?45=*UA**@6!,!189UA**@6!
&A**@6F4*=/#O'789UA**@6/#O'W'*%4(W42B(@2A?';0!
!!!!!!!!O46X4'Y)?45=*>%((@A*3BB'22@?#X4'Y!,!?45=*UA**@60!
!!!!d!'(2'!b!
!!!!!!!!O46X4'Y)%66@*%*4@6!,!%66@*%*4@60!
!!!!d!
!!!!?'*A?6!O46X4'Y0!
d!
!
!
ee9Q_$SQSG/!/V9T!cGS!NFVSG!W9T>$cT8<S!U8//cG!9T!_<STTSWP7!
f!NZ@4DP"%OX4'Y7NQnQ%OX4'Y![P"%OX4'Y!%66@*%*4@6X4'Y7NQn366@*%*4@6X4'Y![PZ4'Y!
B%((@A*3BB'22@?#>@6*?@(/%OO'D7N89>@6*?@(![PB@6*?@(b!
!!!!!!ee!!"#$%&'()*'+*,-H=4H0!
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:

@""]];!
d!
!
!
!
!
!
!
!
!
!
!
CY!
XV.!UIDatePicker:!
!
(The$following$examples$apply$to$a$UIDatePicker$called$myDatePicker)$
!
"#W%*'_4BC'?)D%*'_4BC'?Q@D'!,!89W%*'_4BC'?Q@D'W%*'0!!!
!!!!
!!!89W%*'_4BC'?Q@D'/4"']!
!!!89W%*'_4BC'?Q@D'W%*']!
!!!89W%*'_4BC'?Q@D'W%*'36D/4"']!
!!!89W%*'_4BC'?Q@D'>@A6*W@Y6/4"'?!
!
!
%%%%//To%set%a%specific%format%for%a%date%
!!!!GTW%*'E@?"%**'?![:@?"%*!,!11GTW%*'E@?"%**'?!%((@B;!464*;0!
!!!!1:@?"%*!2'*W%*'E@?"%*7-HQQfDDf####H;0!
%%%%//%%%To%create%a%date%from%string%with%specified%format:%
!!!!GTW%*'![D%*'!,!1:@?"%*!D%*'E?@"T*?4657-HJfJfiLJJH;0!

%%%%//%%%To%get%date%with%specified%format%
!!!!GTT*?465![D%*'T*?465!,!1:@?"%*!2*?465E?@"W%*'7D%*';0!!
%%%%//%To%set%the%datePicker%to%a%specific%date%
!!!!1"#W%*'_4BC'?!2'*W%*'7D%*'!%64"%*'D7RST;0!!
To%find%the%difference%between%two%dates:%
GT/4"'96*'?Z%(!46*'?Z%(!,!1'6DW%#!*4"'96*'?Z%(T46B'W%*'72*%?*W%#;0!

!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!

CZ!
XVI.%GestureRecognizer:%
!
Types%of%gestures:%
89/%O^'2*A?'<'B@564I'?!
89<@*%*4@6^'2*A?'<'B@564I'?!
89_%6^'2*A?'<'B@564I'?!
89TY4O'^'2*A?'<'B@564I'?!
89_46B=^'2*A?'<'B@564I'?!
!
To%create%any%kind%of%gestures,%you%have%to%follow%the%following%steps:%
1) Drag%an%instance%of%your%gesture%recognizer%from%the%library%and%
place%it%on%top%of%your%object%receiving%the%gesture.%
2) Make%sure%that%your%object%is%both%user%interaction%and%multi%touch%
enabled.%
3) Add%the%following%code%in%.h%file%and%implement%it%in%the%.m%file.%
- N9U3B*4@6P=%6D('_%67N89_%6^'2*A?'<'B@564I'?![P?'B@564I'?0!
4) Control%drag%from%your%recognizer%to%the%MainViewController%in%the%
left%side%panel,%and%choose%the%appropriate%method%(usually%called%
selector).%
%
%
%
The%following%are%the%different%methods%to%handle%all%recognizers%
types.%(declare%in%.h%&%implement%in%.m)%
!
f!N9U3B*4@6P=%6D('_%67N89_%6^'2*A?'<'B@564I'?![P?'B@564I'?!b!
!!
!!!!>^_@46*!*?%62(%*4@6!,!1?'B@564I'?!*?%62(%*4@696X4'Y72'(:)Z4'Y;0!
!!!!?'B@564I'?)Z4'Y)B'6*'?!,!>^_@46*Q%C'N?'B@564I'?)Z4'Y)B'6*'?)+!g!

*?%62(%*4@6)+]!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?'B@564I'?)Z4'Y)B'6*'?)#!g!
*?%62(%*4@6)#P0!
!!!!1?'B@564I'?!2'*/?%62(%*4@67>^_@46*Q%C'NL]!LP!46X4'Y72'(:)Z4'Y;0!
!!
d!
%
TOP%STOP%SMOOTHLY%WITH%DECREASING%VELOCITY%ADD%THIS:%
%
4:!N?'B@564I'?)2*%*'!,,!89^'2*A?'<'B@564I'?T*%*'S6D'DP!b!
!!
!!!!>^_@46*!Z'(@B4*#!,!1?'B@564I'?!Z'(@B4*#96X4'Y72'(:)Z4'Y;0!
!!!!>^E(@%*!"%564*AD'!,!2m?*:NNZ'(@B4*#)+![!Z'(@B4*#)+P!g!NZ'(@B4*#)#![!
Z'(@B4*#)#PP0!
!!!!>^E(@%*!2(4D'QA(*!,!"%564*AD'!e!iLL0!
!!!!GT$@5N-H"%564*AD'7!\:]!2(4D'QA(*7!\:H]!"%564*AD']!2(4D'QA(*P0!
!!
!!!!
!
!
!
C[!
!:(@%*!2(4D'E%B*@?!,!L)J![!2(4D'QA(*0!//$Increase$for$more$of$a$slide!
!!!!>^_@46*!:46%(_@46*!,!>^_@46*Q%C'N?'B@564I'?)Z4'Y)B'6*'?)+!g!
NZ'(@B4*#)+![!2(4D'E%B*@?P]!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?'B@564I'?)Z4'Y)B'6*'?)#!g!
NZ'(@B4*#)#![!2(4D'E%B*@?PP0!
!!!!:46%(_@46*)+!,!Q9GNQ3vN:46%(_@46*)+]!LP]!2'(:)Z4'Y)&@A6D2)24I')Y4D*=P0!
!!!!:46%(_@46*)#!,!Q9GNQ3vN:46%(_@46*)#]!LP]!
2'(:)Z4'Y)&@A6D2)24I')='45=*P0!

!!
!!!!189X4'Y!%64"%*'F4*=WA?%*4@672(4D'E%B*@?[i!D'(%#7L!
@O*4@62789X4'Y364"%*4@6cO*4@6>A?Z'S%2'cA*!%64"%*4@627wb!
!!!!!!!!?'B@564I'?)Z4'Y)B'6*'?!,!:46%(_@46*0!
!!!!d!B@"O('*4@6764(;0!
!!
d!
%
PINCH:%
%
f!N9U3B*4@6P=%6D('_46B=7N89_46B=^'2*A?'<'B@564I'?![P?'B@564I'?!b!!!!!
!!!!?'B@564I'?)Z4'Y)*?%62:@?"!,!
>^3::46'/?%62:@?"TB%('N?'B@564I'?)Z4'Y)*?%62:@?"]!?'B@564I'?)2B%(']!
?'B@564I'?)2B%('P0!
!!!!?'B@564I'?)2B%('!,!J0!!!!!
d!
!!
!
Rotate:%
!
f!N9U3B*4@6P=%6D('<@*%*'7N89<@*%*4@6^'2*A?'<'B@564I'?![P?'B@564I'?!b!!!!!
!!!!?'B@564I'?)Z4'Y)*?%62:@?"!,!
>^3::46'/?%62:@?"<@*%*'N?'B@564I'?)Z4'Y)*?%62:@?"]!?'B@564I'?)?@*%*4@6P0!
!!!!?'B@564I'?)?@*%*4@6!,!L0!!!!!
d!
!
Simultaneous%Gesture%Recognizers!
cO'6!AO!X4'Y>@6*?@(('?)=!%6D!"%?C!*='!B(%22!%2!4"O('"'6*465!
89^'2*A?'<'B@564I'?W'('5%*'!%2!2=@Y6!&'(@Y7!
-46*'?:%B'!X4'Y>@6*?@(('?!7!89X4'Y>@6*?@(('?!`89^'2*A?'<'B@564I'?W'('5%*'a!

/='6!2Y4*B=!*@!X4'Y>@6*?@(('?)"!%6D!4"O('"'6*!@6'!@:!*='!@O*4@6%(!"'*=@D2!
you%can%override:%
f!NUcc$P5'2*A?'<'B@564I'?7N89^'2*A?'<'B@564I'?![P5'2*A?'<'B@564I'?!
!2=@A(D<'B@564I'T4"A(*%6'@A2(#F4*=^'2*A?'<'B@564I'?7N89^'2*A?'<'B@564I'?![P!
@*='?^'2*A?'<'B@564I'?!b!!!!!!!!!
!!!!?'*A?6!RST0!
d!
Next,%open%MainStoryboard.storyboard,%and%for%each%gesture%recognizer%
connect%its%delegate%outlet%to%the%view%controller.%
!
!
C\!
XVI.%NSTimer:%
%
f!N9U3B*4@6P2*%?*/4"'?7N4DP2'6D'?!b!
!!!!GT/4"'?!![*4"'?0!
!!!!*4"'?,!1GT/4"'?!2B='DA('D/4"'?F4*=/4"'96*'?Z%(7L)J!*%?5'*72'(:!
2'('B*@?7-2'('B*@?N"@?'O?@5?'22P!A2'?96:@764(!?'O'%*27RST!;0!
d!
!
fNZ@4DP!"@?'O?@5?'22b!
!!!!ee!T'*!Y=%*'Z'?!#@A!Y%6*!*@!'+'BA*'D!'%B=!46*'?Z%(!@:!*4"'!
d!
!
!
!
XVIII.%UIAlertView:%
%
(The$following$examples$apply$to$a$UIAlertView$called$alert)$
!

!
• Creating%and%displaying%an%alert:%
Include$this$code$inside$a$specific$method$to$trigger$this$alert$
on$the$screen$.$
!
893('?*X4'Y![%('?*!,!11893('?*X4'Y!%((@B;!464*F4*=/4*('7 V4.!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"'22%5'7 /=42!42!%!"25.!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!D'('5%*'72'(:!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B%6B'(UA**@6/4*('7-HcnH!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@*='?UA**@6/4*('27!64(;0!
!!!!
!1%('?*!2=@Y;0!
!
!
!
Dismissing%alert%with%a%forced%selected%index%(0%for%cancel)%
1"#3('?*!D42"422F4*=>(4BC'DUA**@696D'+7L!%64"%*'D7Gc;0!
!
!
Executing%some%code%depending%on%the%user%choice:%
%_!NZ@4DP%('?*X4'Y7N893('?*X4'Y![P%('?*X4'Y!
B(4BC'DUA**@63*96D'+7NGT96*'5'?P&A**@696D'+!b!GT$@5N1GTT*?465!
2*?465F4*=E@?"%*7-x\D.]!&A**@696D'+;P0!
d!
!
!
!
!
!
!

!
C]!
XIX.%UIActionSheet:%
%
add%this%to%the%.h%:%
%
-46*'?:%B'!Q%46X4'Y>@6*?@(('?!7!89X4'Y>@6*?@(('?!`893B*4@6T=''*W'('5%*'a!P!
!
f!N9U3B*4@6P='='7N4DP2'6D'?!b!
!!!!893B*4@6T=''*![%B*4@6T=''*!,!11893B*4@6T=''*!%((@B;!
464*F4*=/4*('7-H/=42!42!%6!%B*4@6!2=''*H!
D'('5%*'72'(:!
B%6B'(UA**@6/4*('7-H>%6B'(H!
D'2*?AB*4Z'UA**@6/4*('7-H_?'D4B*'D!%62Y'?H!
@*='?UA**@6/4*('27-HT'B@6D!B=@4B'H]-H/=4?D!B=@4B'H]64(;0!
!!!!!
1%B*4@6T=''*!2=@Y96X4'Y72'(:)Z4'Y;0!
!
!
//%What%to%do%after%the%user%selects%an%option%
%
f!NZ@4DP!%B*4@6T=''*7!N893B*4@6T=''*![P%B*4@6T=''*!
D4DW42"422F4*=UA**@696D'+7NGT96*'5'?P&A**@696D'+b!
!!!!2Y4*B=!N&A**@696D'+P!b!
!!!!!!!!B%2'!L7!
!!!!!!!!!!!!GT$@5N-H_?'D4B*'D!%62Y'?!O?'22'DHP0!
!!!!!!!!!!!!&?'%C0!
!!!!!!!!B%2'!J7!
!!!!!!!!!!!!GT$@5N-HT'B@6D!B=@4B'!O?'22'DHP0!
!!!!!!!!!!!!&?'%C0!

!!!!!!!!B%2'!i7!
!!!!!!!!!!!!GT$@5N-H/=4?D!B=@4B'!O?'22'DHP0!
!!!!!!!!!!!!&?'%C0!
!!!!!!!!B%2'!o7!
!!!!!!!!!!!!GT$@5N-HB%6B'(!&A**@6!O?'22'DHP0!
!!!!!!!!!!!!&?'%C0!
!!!!!!!!!!!!!
!!!!!!!!D':%A(*7!
!!!!!!!!!!!!&?'%C0!
!!!!d!
d!
!
!
!
!
!
!
!
!
!
!
D@!
XX.%Audio:%

To play an audio file:

Insert audio framework first.

Add this to your .h:


#import <AVFoundation/AVFoundation.h>
@property (strong) AVAudioPlayer * chompPlayer;


Add this to your .m:

- (AVAudioPlayer *)loadWav:(NSString *)filename {
NSURL * url = [[NSBundle mainBundle] URLForResource:filename
withExtension:@"wav"];
NSError * error;
AVAudioPlayer * player = [[AVAudioPlayer alloc]
initWithContentsOfURL:url error:&error];
if (!player) {
NSLog(@"Error loading %@: %@", url,
error.localizedDescription);
} else {
[player prepareToPlay];
}
return player;
}



- (void)viewDidLoad
{
[super viewDidLoad];

self.chompPlayer = [self loadWav:@"mySong"];
[self.chompPlayer play];


}
!
!
!
!
!
!
!
!
!
!
!
!
!
DC!
XXI.%Recording:%
%
Add%this%to%your%.h:%
k4"O@?*!`89n4*e89n4*)=a!
k4"O@?*!`3XE@A6D%*4@6e3XE@A6D%*4@6)=a!
!
-46*'?:%B'!?'B@?DX4'Y>@6*?@(('?!7!89X4'Y>@6*?@(('?!
`3X3AD4@<'B@?D'?W'('5%*']!3X3AD4@_(%#'?W'('5%*'a!
b!
!!!!3X3AD4@<'B@?D'?![%AD4@<'B@?D'?0!
!!!!3X3AD4@_(%#'?![%AD4@_(%#'?0!
!!!!89UA**@6![O(%#UA**@60!
!!!!89UA**@6![?'B@?DUA**@60!
!!!!89UA**@6![2*@OUA**@60!
d!

-O?@O'?*#!N6@6%*@"4B]!?'*%46P!9UcA*('*!89UA**@6![O(%#UA**@60!
-O?@O'?*#!N6@6%*@"4B]!?'*%46P!9UcA*('*!89UA**@6![?'B@?DUA**@60!
-O?@O'?*#!N6@6%*@"4B]!?'*%46P!9UcA*('*!89UA**@6![2*@OUA**@60!
fN9U3B*4@6P!?'B@?D3AD4@0!
fN9U3B*4@6P!O(%#3AD4@0!
fN9U3B*4@6P!2*@O0!
-'6D!
!
!
Add%this%to%your%.m:%
fNZ@4DP!?'B@?D3AD4@!
b!
!!!!4:!Nu%AD4@<'B@?D'?)?'B@?D465P!
!!!!b!
!!!!!!!!O(%#UA**@6)'6%&('D!,!Gc0!
!!!!!!!!2*@OUA**@6)'6%&('D!,!RST0!
!!!!!!!!1%AD4@<'B@?D'?!?'B@?D;0!
!!!!d!
d!
fNZ@4DP2*@O!
b!
!!!!2*@OUA**@6)'6%&('D!,!Gc0!
!!!!O(%#UA**@6)'6%&('D!,!RST0!
!!!!?'B@?DUA**@6)'6%&('D!,!RST0!
!!!!!
!!!!4:!N%AD4@<'B@?D'?)?'B@?D465P!
!!!!b!
!!!!!!!!1%AD4@<'B@?D'?!2*@O;0!
!!!!d!'(2'!4:!N%AD4@_(%#'?)O(%#465P!b!
!!!!!!!!1%AD4@_(%#'?!2*@O;0!

!!!!d!
d!
fNZ@4DP!O(%#3AD4@!
b!
!
DD!
!!!!4:!Nu%AD4@<'B@?D'?)?'B@?D465P!
!!!!b!
!!!!!!!!2*@OUA**@6)'6%&('D!,!RST0!
!!!!!!!!?'B@?DUA**@6)'6%&('D!,!Gc0!
!!!!!!!!!
!!!!!!!!4:!N%AD4@_(%#'?P!
!!!!!!!!!!!!1%AD4@_(%#'?!?'('%2';0!
!!!!!!!!GTS??@?!['??@?0!
!!!!!!!!!
!!!!!!!!%AD4@_(%#'?!,!113X3AD4@_(%#'?!%((@B;!!
!!!!!!!!!!!!!!!!!!!!!!!464*F4*=>@6*'6*2c:8<$7%AD4@<'B@?D'?)A?(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!'??@?7y'??@?;0!
!!!!!!!!!
!!!!!!!!%AD4@_(%#'?)D'('5%*'!,!2'(:0!
!!!!!!!!!
!!!!!!!!4:!N'??@?P!
!!!!!!!!!!!!GT$@5N-HS??@?7!\-H]!!
!!!!!!!!!!!!!!!!!!1'??@?!(@B%(4I'DW'2B?4O*4@6;P0!
!!!!!!!!'(2'!
!!!!!!!!!!!!1%AD4@_(%#'?!O(%#;0!
!!!!d!
d!
!
fNZ@4DP%AD4@_(%#'?W4DE4642=_(%#4657!

N3X3AD4@_(%#'?![PO(%#'?!2ABB'22:A((#7NUcc$P:(%5!
b!
!!!!?'B@?DUA**@6)'6%&('D!,!RST0!
!!!!2*@OUA**@6)'6%&('D!,!Gc0!
d!
fNZ@4DP%AD4@_(%#'?W'B@D'S??@?W4DcBBA?7!
N3X3AD4@_(%#'?![PO(%#'?!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'??@?7NGTS??@?![P'??@?!
b!
!!!!GT$@5N-HW'B@D'!S??@?!@BBA??'DHP0!
d!
fNZ@4DP%AD4@<'B@?D'?W4DE4642=<'B@?D4657!
N3X3AD4@<'B@?D'?![P?'B@?D'?!!
!!!!!!!!!!!!!!!!!!!!!!!!!!2ABB'22:A((#7NUcc$P:(%5!
b!
d!
fNZ@4DP%AD4@<'B@?D'?S6B@D'S??@?W4DcBBA?7!
N3X3AD4@<'B@?D'?![P?'B@?D'?!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'??@?7NGTS??@?![P'??@?!
b!
!!!!GT$@5N-HS6B@D'!S??@?!@BBA??'DHP0!
d!
ee!9"O('"'6*!Z4'YW4D$@%D!*@!D@!%DD4*4@6%(!2'*AO!%:*'?!(@%D465!*='!Z4'Y]!
*#O4B%((#!:?@"!%!64&)!
f!NZ@4DPZ4'YW4D$@%D!
!
DW!
b!
!!!!12AO'?!Z4'YW4D$@%D;0!
!!!!O(%#UA**@6)'6%&('D!,!Gc0!

!!!!2*@OUA**@6)'6%&('D!,!Gc0!
!!!!!
!!!!GT3??%#![D4?_%*=20!
!!!!GTT*?465![D@B2W4?0!
!!!!!
!!!!D4?_%*=2!,!GTT'%?B=_%*=E@?W4?'B*@?4'296W@"%462N!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!GTW@BA"'6*W4?'B*@?#]!
GT82'?W@"%46Q%2C]!RSTP0!
!!!!D@B2W4?!,!1D4?_%*=2!@&h'B*3*96D'+7L;0!
!!!!GTT*?465![2@A6DE4('_%*=!,!1D@B2W4?!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2*?465U#3OO'6D465_%*=>@"O@6'6*7-H2@A6D)B%:H;0!
!!!!!
!!!!GT8<$![2@A6DE4('8<$!,!1GT8<$!:4('8<$F4*=_%*=72@A6DE4('_%*=;0!
!!!!!
!!!!GTW4B*4@6%?#![?'B@?DT'**4652!,!1GTW4B*4@6%?#!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!D4B*4@6%?#F4*=c&h'B*236Dn'#27!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1GTGA"&'?!
6A"&'?F4*=96*73X3AD4@zA%(4*#Q46;]!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3XS6B@D'?3AD4@zA%(4*#n'#]!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1GTGA"&'?!6A"&'?F4*=96*7Jp;]!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3XS6B@D'?U4*<%*'n'#]!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1GTGA"&'?!6A"&'?F4*=96*7!i;]!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3XGA"&'?c:>=%66'(2n'#]!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1GTGA"&'?!6A"&'?F4*=E(@%*7rrJLL)L;]!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3XT%"O('<%*'n'#]!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!64(;0!
!!!!!
!!!!GTS??@?!['??@?!,!64(0!
!!!!!

!!!!%AD4@<'B@?D'?!,!113X3AD4@<'B@?D'?!%((@B;!
!!!!!!!!!!!!!!!!!!!!!464*F4*=8<$72@A6DE4('8<$!
!!!!!!!!!!!!!!!!!!!!!2'**46527?'B@?DT'**4652!
!!!!!!!!!!!!!!!!!!!!!'??@?7y'??@?;0!
!!!!!
!!!!4:!N'??@?P!
!!!!b!
!!!!!!!!GT$@5N-H'??@?7!\-H]!1'??@?!(@B%(4I'DW'2B?4O*4@6;P0!
!!!!!!!!!
!!!!d!'(2'!b!
!!!!!!!!1%AD4@<'B@?D'?!O?'O%?'/@<'B@?D;0!
!!!!d!
d!
!
!
!
!
DX!
XXII.%MAIL%COMPOSER:%
!
MailComposerViewController.h:%
!
k4"O@?*!`89n4*e89n4*)=a!
k4"O@?*!`Q'22%5'89eQ'22%5'89)=a!
k4"O@?*!`Q'22%5'89eQEQ%4(>@"O@2'X4'Y>@6*?@(('?)=a!
!
-46*'?:%B'!Q%4(>@"O@2'?X4'Y>@6*?@(('?!7!89X4'Y>@6*?@(('?!
`QEQ%4(>@"O@2'X4'Y>@6*?@(('?W'('5%*'a!!
!
fN9U3B*4@6P@O'6Q%4(7N4DP2'6D'?0!

!
-'6D!
!
MailComposerViewController.m:%
!
f!N9U3B*4@6P@O'6Q%4(7N4DP2'6D'?!b!
!!!!QEQ%4(>@"O@2'X4'Y>@6*?@(('?![O4BC'?!,!11QEQ%4(>@"O@2'X4'Y>@6*?@(('?!
%((@B;!464*;0!
! O4BC'?)"%4(>@"O@2'W'('5%*'!,!2'(:0!
!!!!12'(:!O?'2'6*Q@D%(X4'Y>@6*?@(('?7O4BC'?!%64"%*'D7RST;0!
d!
!
ee!82'D!*@!D42"422!*='!"%4(>@"O@2'?!Y='6!B%6B'(!42!O?'22'D!
f!NZ@4DP"%4(>@"O@2'>@6*?@(('?7NQEQ%4(>@"O@2'X4'Y>@6*?@(('?[PB@6*?@(('?!
D4DE4642=F4*=<'2A(*7NQEQ%4(>@"O@2'<'2A(*P?'2A(*!'??@?7NGTS??@?[P'??@?!!
b! !
!!!!12'(:!D42"422Q@D%(X4'Y>@6*?@(('?364"%*'D7RST;0!
d!
!
!
!
XXIII.%Auto_Method%Call:%
!
In%seconds:%

[self performSelector:@selector(myMethodName)
withObject:nil afterDelay:2.0f];
!
!
XXIV.%Animation:%

%
!!189X4'Y!&'546364"%*4@62764(!B@6*'+*764(;0!
!!189X4'Y!2'*364"%*4@6WA?%*4@67L)i;0!
// here you can implement whatever you want to be animated:
!!189X4'Y!B@""4*364"%*4@62;0!
!
DY!
XXV.%Data_Persistence:%
!
1)%Key/Value%way:%
!
%P!SAVING7!
fNZ@4DP2%Z'T*?4657NGTT*?465[P"#T*?465!
b!
11GT82'?W':%A(*2!2*%6D%?D82'?W':%A(*2;!2'*c&h'B*7"#T*?465!
:@?n'#7-HT*?465H;0!
!!!!!
d!
!
Calling%the%function:%
12'(:!2%Z'T*?4657 ='((@!*=42!42!%!2*?465.;0!
!
&P!RETRIEVING7!
fNGTT*?465[P?'*?4'Z'T*?465!
b!
GTT*?465[!?'B@Z'?'DT*?465!,!11GT82'?W':%A(*2!2*%6D%?D82'?W':%A(*2;!
@&h'B*E@?n'#7-HT*?465H;0!
?'*A?6!?'B@Z'?'DT*?4650!
d!
!

function%call;%
GTT*?465!["#G'YT*?465!,!12'(:!?'*?4'Z'T*?465;0!

!
!
2)%DEALING%WITH%FILES:%
ee!Y4((!&'!%Z%4(%&('!46!*='!6'+*!AOD%*'!!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!

×