カテゴリー : 2012年 9月20日

iOS 6でEvent Kitでイベント追加には、追加のメソッド呼び出しが必要


Event Kitを使ってカレンダーにイベントを追加する場合、iOS 5までは特にユーザに同意を求めなくともできた。iOS 6からは、ユーザに同意を求める事が必須になる。

そのために、EKEventStoreにrequestAccessToEntityType:completion:というメソッドが追加された。これを呼ぶと、ユーザに同意を求めるアラートが、OS側から表示される。ここでOKをもらうと、カレンダーへのアクセスが可能になる。これを呼ばないiOS 5のソースコードでは、iOS 6でまったくカレンダーにアクセスできなくなるので注意。defaultCalendarForNewEventsでnilが返ってくる。

このメソッドは、アラートを表示するため、続きをcompletionブロックの中でやらないといけないので注意。さらに、completionブロックは、メインスレッド以外で実行されるようなので、さらに注意。iOS 5と共存するコードを書くには、ちょっと手を入れる必要あり。

Xcode 4.5がMac App Storeに登場、あとUIRefreshControl


iOS 6が、一般に公開。同時に、Xcode 4.5もMac App Storeに登場。これで、iOS 6ネタは解禁ということでいいのかな。

ということで、iOS 6ネタをひとつ。iOS 6からは、UI KitにUIRefreshControlが追加された。これは、いわゆる「引っ張って更新(Pull to Refresh)」を実現するコントロール。サードパーティアプリの機能を、本家が取り込んだ格好だ。

UIRefreshControlは、引っ張ると、うにょーんとのびる。この辺はAppleらしさが追加されたようだ。

UIRefreshControlの使い方は簡単で、インスタンスを作成して、スクロールビューにaddSubview:してやればよい。位置とか大きさとかは気にしなくとも、放り込んでおけば、あとは勝手に面倒を見てくれる。

UIRefreshControl* refreshControl;
refreshControl = [[UIRefreshConrol alloc] init];
[refreshControl addTarget:self action:@selector(refreshAction:) 
        forControlEvent:UIControlEventValueChanged];

[_scrollView addSubview:refreshControl];

スクロールビューであれば、UITableViewだろうが、UIWebViewのやつだろうが(scrollViewプロパティから取得する)、何でもオッケー。便利だ。

引っ張った後の更新は、アクションとして受け取る。UIControlEventValueChangedイベントが発行されるので、そいつを受け取ればいい。