スタンフォード大学のiPhoneアプリ開発講座の宿題(Presence 3)
Presence 3の主な課題はPresence 2を改良する事で、具体的にはTwitterから情報を取得してくる処理等をマルチスレッド化して、情報取得中にアプリケーションがフリーズしないようにするという物である。また、Twitterにつぶやきを投稿できるようにするというのも、もう一つの大きな課題である。ここまで実装することで、とりあえずTwitterアプリとしての最低限の機能を備えたという感じだ。
Presence 2と同様に、本課題の回答も以下のseiji blogブログで非常に明解に説明されているので、本ブログでは一部追加課題のコードのみ触れる事にする。
1. Twitterのフレンド情報をplistではなく、Twitterのサーバから取得するようにする。
スタンフォード大から提供されているTwitterHelperクラスに新たにメソッドを追加
する事になるのだが、以下のようなメソッドを追加し、このメソッドを呼ぶ事で
Twitterのサーバからフレンド情報を取って来る事が出来る。
+ (NSArray *)fetchFriends:(NSString *)username { NSString *urlString = [NSString stringWithFormat:@"http://%@/statuses/friends/%@.json", [self twitterHostnameForUsername:username], username]; NSURL *url = [NSURL URLWithString:urlString]; return [self fetchJSONValueForURL:url]; }
2. Twitterのつぶやきを規定どおりの140字以内に制限するようにし、残り何文字入力出来るか表示する。
Twitterのつぶやきを送信するためのStatusComposeViewControllerにUITextFieldDelegateを実装することで、ユーザのテキスト入力をキャッチする事が出きるようになる。
参考ブログ:UITextFieldで文字数制限をする : X(ペケ)code Programming
#define MAX_IMPUT_CHARACTERS 140 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { int numOfCharacters = range.location + [string length]; BOOL rtn = YES; if (numOfCharacters < MAX_IMPUT_CHARACTERS) { rtn = YES; } else { rtn = NO; } // Display how many characters a user can input. numCharLabel.text = [NSString stringWithFormat:@"%d", MAX_IMPUT_CHARACTERS - numOfCharacters]; return rtn; }
3. Objective-Cのソースコード静的チェックツールClang Static Analyzerを動作させてみる。
講義で紹介されたClang Static Analyzerを実際に動かして見るという課題だが、インストールして実行してみると以下のようなエラーが出た。
This produced the dreaded Checking Dependencies... ** BUILD SUCCEEDED ** scan-build: Removing directory '/var/folders/Ck/Cklnad2tHayb4iUB6fuC0U+++TQ/-Tmp-/scan-build-2009-05-10-1' because it contains no reports.
そこで、http://www.fruitstandsoftware.com/blog/2008/08/finding-memory-leaks-with-the-llvmclang-static-analyzer/に書かれてある設定を実施すると、上手く動作するようになった。
以下は私が作成したTwitterのつぶやき投稿画面。