スポンサーサイト

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

[iOS]CoreDataチュートリアル(土台編)

○もくじ○
[iOS]CoreDataチュートリアル(土台編) <- 現在
[iOS]CoreDataチュートリアル(CoreDataの作成)
[iOS]CoreDataチュートリアル(CoreDataのイベント追加)
[iOS]CoreDataチュートリアル(CoreDataのイベントフェッチ)
[iOS]CoreDataチュートリアル(CoreDataのイベント削除)

この回では、CoreDataの利用の前に必要な前準備や今回のサンプルを作成するためのビューの作成・セットアップを行っていきます。

CoreData~Tutorial~ 仕切り用画像


●まずは Xcode で "Create a new Xcode project" を選択し、新規プロジェクトの作成を行います。
[iOS]CoreDataチュートリアル_2

●"choose a template for your new project:" では "Empty Application" を選択します。
[iOS]CoreDataチュートリアル_3

●"Product Name" には Locations と名前をつけましょう。
(名前は正直何でもよいのですが、サンプル通りに進めたいのであればこの名前を付けることが重要です。)
[iOS]CoreDataチュートリアル_4

●オプションセレクションで、 "Use Core Data" にチェックを入れて作成します。
[iOS]CoreDataチュートリアル_5

ここで、作成したプロジェクトにLocations.xcdatamodeldというファイルが入っているか確認してください。
(管理オブジェクトモデルと呼ぶ)


次にCoreLocationフレームワークをリンクします。

●[Locations]->[TARGETS]->[Locations]->[Summary]->[Linked Frameworks and Libraries]
と見ていきます。

[iOS]CoreDataチュートリアル_6

●+ボタンから追加窓を開き、「CoreLocation.framework」と入力し出てきたフレームワークを追加します。
[iOS]CoreDataチュートリアル_7

[iOS]CoreDataチュートリアル_8

これで下準備は整いました。

次に行く前に少しだけ用語の確認を行います。

CoreDataスタック:永続ストアからのデータの入出力操作
>>スタックは本を積み重ねるようなイメージに置き換えられます。
    積み上げた本は下から取り出すのは難しいため、上から順にデータを取り出すことになります。
    最初に入れたものを最後に取り出すということでFIFO(First In First Out)と呼ばれます。


管理オブジェクト : MSManagedObjectまたはNSManagedObjectのサブクラスのインスタンスで、テーブルのレコードに当たるものです。
[iOS]CoreDataチュートリアル_9 

管理オブジェクトコンテキスト : NSManagedObjectContextのインスタンスで、管理オブジェクトのコレクション(まとまり)を管理することです。

では、再びソースに戻ります。
●Xcodeで、 "RootViewController" という名前でUITableViewControllerのサブクラスを作成してください。
[iOS]CoreDataチュートリアル_10
[iOS]CoreDataチュートリアル_11


●作成した "RootViewController" のヘッダファイルへ次のソースを打ち込みます。
//RootViewController.h
//ここでは以下のことを行います。
//・<CoreLocation/CoreLocation.h>のimport
//・<CLLocationManagerDelegate>のimport
//・各種必要なプロパティの実装

#import <CoreLocation/CoreLocation.h>
@interface RootViewController : UITableViewController <CLLocationManagerDelegate>
{
NSMutableArray *eventsArray;
NSManagedObjectContext *managedObjectContext;
CLLocationManager *locationManager;
UIBarButtonItem *addButton;
}
@property (nonatomic, retain) NSMutableArray *eventsArray;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, retain) UIBarButtonItem *addButton;
@end


●これにともない、 "RootViewController.m" に各プロパティのsynthesizeを追加します。
//以下の個所へsynthesizeを追加します。
#import "RootViewController.h"

@implementation RootViewController
//ここから追加
@synthesize eventsArray;
@synthesize managedObjectContext;
@synthesize locationManager;
@synthesize addButton;
//ここまで


●次に、Core Locationマネージャのアクセサメソッドを "RootViewController.m" へ追加します。
//アクセサメソッドを追加する
- (CLLocationManager *)locationManager {
if (locationManager != nil) {
return locationManager;
}
locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
locationManager.delegate = self;
return locationManager;
}


●"Core Location Manager Delegate" のメソッドを "RootViewController.m" へ実装する。
//CoreLocationManagerDelegateメソッドの実装
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
addButton.enabled = YES;
}

- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
addButton.enabled = NO;
}


●"RootViewController.m" の "viewDidLoad" を編集します。
//ナビゲーションバーへのボタン追加を行う処理の追加
- (void)viewDidLoad {
[super viewDidLoad];
// タイトルを設定する。
self.title = @"Locations";
// ボタンをセットアップする。
self.navigationItem.leftBarButtonItem = self.editButtonItem;
addButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self action:@selector(addEvent)];
addButton.enabled = NO;
self.navigationItem.rightBarButtonItem = addButton;
// ロケーションマネージャを起動する。
[[self locationManager] startUpdatingLocation];
}


●メモリ管理用メソッドへ各プロパティの解放処理を記述します
(ただし自分の環境ではARC機能によりdeallocが不要になっております)
//メモリ異常や解放時にプロパティを空・解放する処理を追加する
- (void)viewDidUnload {
self.eventsArray = nil;
self.locationManager = nil;
self.addButton = nil;
}
- (void)dealloc {
[managedObjectContext release];
[eventsArray release];
[locationManager release];
[addButton release];
[super dealloc];
}


●"AppDelegate.h" に次のプロパティを追加
//xcode3.x系では作成時にプロジェクト名AppDelegateとなっていました。
@interface AppDelegate : UIResponder {
UINavigationController **navigationController;
}
@property (nonatomic, retain) UINavigationController *navigationController;


●"AppDelegate.m" に "RootViewController" をimport
//RootViewController.hをimport
#import "AppDelegate.h"
#import "RootViewController.h" //追加

@implementation AppDelegate


●"AppDelegate.m" に先程追加したプロパティのsynthesizeを追加
//navigationControllerをsynthesize
@implementation AppDelegate
@Synthesize navigationController;


●application:didFinishLaunchingWithOptions:メソッドを次のように実装します。
//xcode4.x記法(ARC機能使用)で記述しています。
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
RootViewController *rootViewController = [[RootViewController alloc]
initWithStyle:UITableViewStylePlain];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// エラーを処理する
}
// 管理オブジェクトコンテキストをView Controllerに渡す。
rootViewController.managedObjectContext = context;
UINavigationController *aNavigationController = [[UINavigationController alloc]
initWithRootViewController:rootViewController];
self.navigationController = aNavigationController;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window addSubview:[navigationController view]];
[self.window makeKeyAndVisible];
return YES;
}


▲ここで一度ビルドチェック▲
ここで一度ビルドを行い、シミュレータ上でエラーなく起動が行えるかをチェックしましょう。
[iOS]CoreDataチュートリアル_12
上記のようにナビゲーションバーにボタンが2つ追加され、コンテンツ内にはテーブルビューが表示されていれば確認は完了です。


こまでがこのプロジェクトの土台部分です。
ここから先、CoreDataを利用していくことになります。
今までの作業がいまいちうまくいかなかったり、解ってない方は再度戻って何を作ったのかを理解してください。
・UINavigationControllerの利用
・UITableViewControllerの利用
この2点ができているのであれば [iOS]CoreDataチュートリアル(CoreDataの作成) へ移りましょう。



次回 : [iOS]CoreDataチュートリアル(CoreDataの作成)
このエントリーをはてなブックマークに追加

tag : iOS プログラミングガイド

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

Android/iOS

iOS URL:

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。