はてなブックマークに追加

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はてなブックマークに追加

iPhoneアプリ:RSSリーダを作る




サイトを移行しました。
iPhoneアプリと、そのプログラム



iPhoneネットワークプログラミングの第4回と第5回
iPhoneネットワークプログラミング その4
iPhoneネットワークプログラミング その5
のまとめとして、今度はRSSリーダを作ってみましょう。

今回作るRSSリーダは、
プログラム内にハードコーディングされたRSSフィードから情報を読み取り、
iPhone上に記事のタイトルを表示し、各記事のタイトルをタップすると
Safariでその記事が読める、という非常に高機能な仕上がり(笑)
役に立たない度合いは、前回作成した画像ビュアといい勝負w
iPhoneアプリ:画像ビュアを作る

完成図はこちらです。
今回はプログレスバーすらついておりませんが・・

rssreader1.jpg rssreader2.jpg


さて、ではXcodeで開発を進めていきます。
毎度おなじみの手順ですが、今回はプロジェクトの種類をNavigation-Basedで作成しています。

Xcodeの「新規作成」-> 「ファイル」->「新規プロジェクト」を選択。
プロジェクトの種類「Application」でテンプレート「Navigation-based Application」を選択。
プロジェクト名は「RssReader」にします。

今回はIB側での操作はありません。
早速、Xcodeにプログラムを書いていきましょう。
といっても、ほとんどが概出のものですので、理解はしやすいと思います。

RootViewController.h
@interface RootViewController : UITableViewController 
{
NSXMLParser * xmlParser;
NSMutableArray *titles, *links;

NSString *currentElement;
NSMutableString *currentTitle, *currentLink;
}
@end


今回のプログラムでは記事のタイトルの他に、記事へのURLが必要なので
第4回の内容に加えて、currentLinkという変数を追加しています。
また、記事のタイトル、URLをそれぞれtitles, linksという名前のNSMutableArray に格納します。
図示すればこんな感じです。

rssreader3.jpg

はい、まともなプログラマならNSDictionaryを使いますね(笑)
今回は、サンプルプログラムということで分かりやすさ優先で。

次にRootViewController.mにxml用のデリゲートメソッドを追加していきます。
内容は第4回とほぼ同じですね。
didEndElementのなかで、記事タイトルとURLをそれぞれの配列に格納しています。

- (void)viewDidLoad {
[super viewDidLoad];

NSURL *xmlURL = [NSURL URLWithString:@"http://iiphoneapp.blog51.fc2.com/?xml"];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];

// 領域確保
titles = [[NSMutableArray alloc] init];
links = [[NSMutableArray alloc] init];

// 各種設定
[xmlParser setDelegate:self];
[xmlParser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];

if ([elementName isEqualToString:@"item"]) {
currentTitle = [[NSMutableString alloc] init];
currentLink = [[NSMutableString alloc] init];
}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"title"]) {
[currentTitle appendString:string];
} else if( [currentElement isEqualToString:@"link"]) {
[currentLink appendString:string];
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[titles addObject:currentTitle];
[links addObject:currentLink];

[currentTitle release];
[currentLink release];
}
}


ここまでで、RSSのパースは完成です。次にTableViewの設定を行ないます。
下記の各プログラムをRootViewController.mに追加or編集してください。

まずは tableView:numberOfRowsInSectionメソッドを次のように変更してください。
ここでは、テーブルに格納する行数をタイトルの記事の数と指定しています。

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section {
return [titles count];
}


次に、tableView:(cellForRowAtIndexPathメソッドの最後(return cell; の前)に
下記の2行を追加してください。このように記述することで、テーブルカラムに記事のタイトルを設定できます。

int index = [indexPath indexAtPosition: [indexPath length] - 1]; 
cell.textLabel.text = [titles objectAtIndex:index];



さて、最後にセルがタップされた時のアクションを設定します。
1行目でタップされたセルの行数をindexに格納します。
2行目でlinks配列から当該URLをとりだし
3行目で改行文字の削除
4行目でSafariを開いています。

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
int index = [indexPath indexAtPosition: [indexPath length] - 1];
NSString * link = [links objectAtIndex:index];

[link stringByPaddingToLength:([link length]-3) withString:@"" startingAtIndex:0];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:link]];
}


ここまで記述できたら、実行して動作するか確認してみてください。
なお、この記事作成にあたっては、ここを参考にさせていただきました。
あわせて御覧ください。

スポンサーサイト

コメントの投稿

非公開コメント

開発アプリ

iDOF 色影 ラテアート ぱすてる

プロフィール

hokuson

Author:hokuson
京都在住。iPhoneアプリ「色影」や「iDOF」の開発者。アプリのレビューとかもしてみる。博士後期課程@R大学。ついに就職活動なるものをしなければいけないらしい。誰か雇ってください。笑。

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
カテゴリ
最新コメント
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。