NSManagedObjectModelクラス

2011. 03. 27
●概要

NSManagedObjectModelオブジェクトは、スキーマ(アプリケーション内で使用するエンティティのコレクション(データモデル))を表現するものです。

モデルは、スキーマ内のエンティティを表す一つ以上のNSEntityDescriptionオブジェクトを含みます。

各NSEntityDescriptionオブジェクトは、スキーマ内のエンティティのプロパティ(またはフィールド)を表す、プロパティ記述オブジェクト(NSPropertyDescriptionのサブクラスのインスタンス)を持ちます。

Core Dataフレームワークは、いくつかの方法でこの記述を使用します。
  • Interface Builder内で作成されるUIへの制約
  • 実行時における属性と関連値の有効化
  • 管理オブジェクトとデータベースまたはオブジェクトの永続化のためのファイルベースのスキーマ間とのマッピング
管理オブジェクトモデルは、各エンティティオブジェクトと、対応するCore Dataフレームワーク内の永続ストレージ構造を使用するための管理オブジェクトクラスとの間をマッピングして保持します。

エンティティのメソッドによって、特定の管理オブジェクトのためのエンティティを決定することができます。

通常は、Xcodeのデータモデリングツールを使用して管理オブジェクトモデルを生成しますが、必要に応じてプログラムでモデルを構築することも可能です。


モデルファイルの読み込み

管理オブジェクトモデルファイルは、通常はプロジェクトまたはフレームワーク内に格納されています。

モデルを読み込むには、コンストラクタへURLを提供します。

モデルの読み込みは、そのエンティティの全てを読み込むわけではないことに注意してください。


フェッチ要求の格納

多くの場合、アプリケーションでは共通する特徴を持つ部分の、オブジェクトのコレクションを取得しようとします。

時には予めそれらの特徴(プロパティ値)を定義したり、必要ならば実行時に値を指定することもできます。

例えば、自身の持つ全てのPixar映画を取得できるようにしたり、あるいは実行時にユーザが指定したものより多い全ての映画を取得できるようにしたい場合があります。

フェッチ要求は、多くの場合テンプレートとして管理オブジェクトモデルで予め定義されています。

それらはモデル内でのクエリとパラメータを名前付きで事前に定義することができます。

NSManagedObjectModelは名前によって格納されているフェッチ要求を取得するためのAPIを提供し、変数の代入を実行します。
fetchRequestTemplateForName:fetchRequestFromTemplateWithName:substitutionVariables:を参照)

フェッチ要求テンプレートはプログラムで生成することも出来、setFetchRequestTemplate:forName:を使用してモデルと関連付けしますが、一般的には通常Xcodeの設計ツールを使用して定義します。


構成

時々、モデルは(特に一つのフレームワークの場合)様々な状況で使用されるので、様々な状況で使用するためにエンティティの異なるセットを指定する必要があるかもしれません。

例えば、ユーザが管理者権限を持っている場合のみ、特定のエンティティを使用可能にするかもしれません。

この要件をサポートするためには、モデルは複数の構成を持つことができます。

各構成はエンティティの名前と関連するセットを持っています。

セットは重複する場合があります。

プログラムで構成を構築する場合、setEntities:forConfiguration:またはXcodeの設計ツールを使用し、entitiesForConfiguration:を使用して指定した構成の名前のエンティティを取得します。


モデルの変更

モデルは永続ストアのデータの構造を記述しているので、少しでもモデルを変更するとスキーマが変わるため、予め生成されたストアとの互換性が無くなります(したがって開くことができません)。

スキーマを変更する場合は、現在のストアのデータを新しいバージョンに移行する必要があります。
Core Data Model Versioning and Data Migration Programming Guideを参照)

例えば、現在のエンティティに新たなエンティティや属性を追加する場合、既存のストアは開くことができなくなります。

有効な制約または属性の新たなデフォルト値を設定することで、既存のストアを開くことができるようになります。


プログラムでのモデルの編集

管理オブジェクトモデルは、オブジェクトグラフマネージャ(管理オブジェクトコンテキストまたは永続ストアコーディネータ)によって使用されるまでは編集可能です。

これらは動的に生成または変更をすることができます。

ただし一度使用したモデルは変更しないでください。

実行時に適用した場合、オブジェクトマネージャが最初のモデルを使ってデータをフェッチすると、そのモデル全体が編集できなくなります。

それ以降の時点でモデルやサブオブジェクトの変更を行うと例外が発生します。

使用中のモデルを変更する必要がある場合は、コピーを生成し、コピーを変更して、その後古いモデルのオブジェクトを破棄してください。


高速列挙

Mac OS X v10.5以降とiOSでは、NSManagedObjectModelはNSFastEnumerationプロトコルをサポートしています。

モデルのエンティティを列挙するために使用した例を以下に示します。

NSManagedObjectModel *aModel = ...;

for (NSEntityDescription *entity in aModel) {

    // entity is each instance of NSEntityDescription in aModel in turn

}



●タスク

モデルの初期化

– initWithContentsOfURL:
+ mergedModelFromBundles:
+ mergedModelFromBundles:forStoreMetadata:
+ modelByMergingModels:
+ modelByMergingModels:forStoreMetadata:

エンティティと構成

– entities
– entitiesByName
– setEntities:
– configurations
– entitiesForConfiguration:
– setEntities:forConfiguration:

フェッチ要求テンプレートの取得

– fetchRequestTemplatesByName
– fetchRequestTemplateForName:
– fetchRequestFromTemplateWithName:substitutionVariables:
– setFetchRequestTemplate:forName:

ローカライズ


– localizationDictionary
– setLocalizationDictionary:

バージョン管理とマイグレーション

– isConfiguration:compatibleWithStoreMetadata:
– entityVersionHashesByName
– versionIdentifiers
– setVersionIdentifiers:



●クラスメソッド

mergedModelFromBundles:

+ (NSManagedObjectModel *)mergedModelFromBundles:(NSArray *)bundles

指定したバンドル内で見つかった、全てのモデルを結合して生成したモデルを返します。

bundles:検索するNSBundleのインスタンスの配列です。

nilを指定した場合はメインバンドルが検索されます。



●インスタンスメソッド

initWithContentsOfURL:

- (id)initWithContentsOfURL:(NSURL *)url

指定したURLにあるモデルファイルを使用してレシーバを初期化します。

戻り値は、urlにあるファイルを使用して初期化された管理オブジェクトモデルです。

url:モデルファイルの場所を指定するURLオブジェクトです。



参考文献

NSManagedObjectModel Class Reference






Bose SoundLink around-ear wireless headphones II
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 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 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose SoundLink around-ear wireless headphones II
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR