objective-cで新しく発見したこと毎日日記

objective-cで新しく発見したこと毎日日記

xcodeでiPhoneアプリ開発始めました。
とりあえず日々の発見を記録、誰の参考にも多分なりません。

Amebaでブログを始めよう!
今日は新しい発見もなさそうなので一先ず今後やりたいことをメモ。

とりあえずiPhoneの連絡先を自由に?tableViewに表示出来るようになったので、今後やりたい一連の流れを考える。

基本的にアプリをダウンロード・インストールして一番始めにそのアプリ起動するわけだが、 一発目の起動時は当然連絡先がない。ちまちま入れていくのも面倒い。 なら連絡先からごそっとデータを取ってくるが手っ取り早いが、それだけならiPhone標準の連絡先とは変わらない。いや、かりに同じ機能が実装出来たとしても、HIDEが作っている分同等と言うとAppleの開発者に申し訳ない。どうでもいいことだ。

なので標準の連絡先にない機能を実装したい、それは、新たなフィールドとそのフィールドによるグループ分けだ。のちにそのフィールドをスケジュール機能を連動させたいがまだカレンダーに関してはチンプンカンプンなのでこれが後日。

実現の方法として、起動時に読み込んだ連絡先を独自に編集する機能を実装、新しいフィールドを標準の連絡先に追加することはできないので、連絡先と紐付けしつつ新しいフィールドはCoreDateに記録。

起動時、連絡先を読み込みつつ紐付けされたCoreDateから新しいフィールドでグループ分けを実現。

ここまでをなんとか来週の23日まで終わらせたい。
がんばろ
基本的に現在のアプリの開発環境はiPhone5sだけども、娘のiPhone4で確認すると連絡先が表示されない。

「連絡先にアクセスしてもいい?」[OK][NO]みたいな感じで勝手に表示されるのかと思ったらそんなに甘くない。

さすがはobjective-cさん、ここから実装しなくてはならない。

実際は、

CFIndexnumberOfPeople;
ABAddressBookGetPersonCount(addressBook);

でnumberOfPeople>0にならないと次の連絡先から個人を抽出するforの刑が始まらず何も表示されない。

なのでnumberOfPeopleをforの刑にする前に、

ABAuthorizationStatus status =ABAddressBookGetAuthorizationStatus();

をして許可状況を確認する必要がある。

statusで以下を調べられる。

kABAuthorizationStatusNotDetermined == 0
許可か不許可か、まだユーザーが選択していない場合

kABAuthorizationStatusRestricted == 1
機能制限設定によって連絡先へのアクセスができない場合

kABAuthorizationStatusDenied == 2
連絡先へのアクセスをユーザーが禁止している場合

kABAuthorizationStatusAuthorized == 3
連絡先へのアクセスをユーザーが許可している場合

これで状況を確認することができる。
status!=3の場合は以下を実行することで

ABAddressBookRequestAccessWithCompletion(NULL, ^(bool granted, CFErrorRef error) { grantContacts = granted; });

上記の[OK][NO]をユーザーに確認できる。

[OK]することで連絡先への永久ライセンスが取得出来る。

余録だが、[OK]後アプリを再起動しても、

CFIndexnumberOfPeople;
ABAddressBookGetPersonCount(addressBook);

は当たり前だが常に3を返す。
アプリを消して再インストールをしてもだ。

※iPhoneを初期化すればさすがにリセットできると思うが未検証。