2010年9月30日木曜日

Objective-C + libxml2 を使ってフィードを取り込みたいんだ (2)

前回書き忘れてた。Xcode 3.2.4 and iOS SDK 4.1 で試してる。
古いバージョンとか新しいバージョンのことは気にしない。

libxmlの前に NSURLConnection を使ってサーバにデータを取りにいく必要があるのでそっちから進める。
けど、説明は簡単に終わらせる。

NSURLConnection のメソッド initWithRequest:delegate: を呼び出すとサーバに接続して結果を返してくれる。
そんで、結果を返してくれる度にその結果に対応した NSURLConnection のデリゲートメソッドが実行されるようになってる。


@implementation RSSImporter

/**
とりあえず init に NSURLConnection の処理を書いてみる。
*/
- (id)init {

self = [super init];
if (self != nil) {
NSString *feedURL = @"http://eyesrobe.blogspot.com/feeds/posts/default?alt=rss";
NSURLRequest *requestURL = [NSURLRequest requestWithURL:[NSURL URLWithString:feedURL]];
NSURLConnection *urlConnection = [[[NSURLConnection alloc] initWithRequest:requestURL delegate:self] autorelease];
if (urlConnection == nil) {
NSLog(@"error");
}
}

return self;
}



- (void)dealloc {
[super dealloc];
}


#pragma mark NSURLConnection Delegate methods
//
// ここから下のメソッドが、NSURLConnectionのデリゲートメソッド
//

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// データ受信
NSLog(@"受信中(データは分割されて受信される)");
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// 受信完了
NSLog(@"受信完了");
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// 受信エラー
NSLog(@"エラー");
}

@end


NSURLConnection の説明終わり。
ここまでで取り敢えず実行させてみたい。
実行させるにはどこかでRSSImporterのインスタンスを作らないとなので、作る。
{YourProject}AppDelegate.m/.h でやることにする。


//
// {YourProject}AppDelegate.m
// コードの{YourProject}は自分のプロジェクト名に置き換えてね。
//
// ここでは、RSSImporterクラスの使い方の説明しようとしてるだけなの
// で、「// これ追加」ってところを自分の環境にあわせて追加すること。
//

#import <UIKit/UIKit.h>

@class {YourProject}ViewController;
@class RSSImporter; // これ追加

@interface {YourProject}AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
{YourProject}ViewController *viewController;
RSSImporter *importer; // これ追加
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet {YourProject}ViewController *viewController;
@property (nonatomic, retain) RSSImporter *importer; // これ追加

@end





//
// {YourProject}AppDelegate.h
// コードの{YourProject}は自分のプロジェクト名に置き換えてね
//
// ここでは、RSSImporterクラスの使い方の説明しようとしてるだけなの
// で、「// これ追加」ってところを自分の環境にあわせて追加すること。
//

#import "{YourProject}AppDelegate.h"
#import "{YourProject}ViewController.h"
#import "RSSImporter.h" // これ追加

@implementation {YourProject}AppDelegate

@synthesize window;
@synthesize viewController;
@synthesize importer; // これ追加

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

importer = [[RSSImporter alloc] init]; // これ追加

[window addSubview:viewController.view];
[window makeKeyAndVisible];
return YES;
}

~(略)~

- (void)dealloc {
[importer release]; // これ追加
[viewController release];
[window release];
[super dealloc];
}

@end



編集終わったら、ビルドと実行を行う。
そうするとコンソールに、

[Session started at 2010-09-30 15:21:35 +0900.]
2010-09-30 15:21:39.928 Foo[1715:207] 受信中(データは分割されて受信される)
2010-09-30 15:21:39.931 Foo[1715:207] 受信中(データは分割されて受信される)
2010-09-30 15:21:39.962 Foo[1715:207] 受信中(データは分割されて受信される)
2010-09-30 15:21:39.964 Foo[1715:207] 受信中(データは分割されて受信される)
2010-09-30 15:21:39.966 Foo[1715:207] 受信中(データは分割されて受信される)
2010-09-30 15:21:39.967 Foo[1715:207] 受信完了


な感じで表示さるので、これで NSURLConnection については理解できたということにする。

0 件のコメント:

コメントを投稿