iOSのCoreDataの基本使用と簡単なパッケージ
13746 ワード
CoreData CoreDataデータ永続化フレームワークはCocoa APIの一部であり、iOS 5のバージョンで初めて登場し、エンティティ-属性-値モードに従ってデータを整理し、XML、バイナリファイルまたはSQLiteデータファイルの形式でデータを永続化することができる. CoreDataが主に提供するオブジェクト-リレーションシップマッピング(ORM)機能は、OCオブジェクトをデータに変換してファイルに保存したり、データをOCオブジェクト に変換したりすることができる.
CoreDataとSQLiteの比較 SQLite 1 Cインタフェースに基づいて、sql文を使用する必要があります.コードは煩雑です.2大量のデータを処理するとき、表関係はより直感的です.3 OCで可視化されているかどうかの です. CoreData 1が可視化、undo/redo能力2がある複数のファイルフォーマットNSSQLiteStoreType、NSBinaryStoreType、NSInMemoryStore Type、NSXMLStoreTypeを実現できる.3.アップルの公式APIサポート、iOSとの結合がより緊密な CoreDataコアオブジェクト NSManagedObjectContextデータマネージャクラス(アプリケーションとデータベース間のインタラクションを担当) NSManagedObjectModelデータモデルクラス(可視化のためにモデルを作成するベースクラスの場合) NSPersistentStoreCoordinatorデータコーディネータクラス(永続化データベースの追加) NSEntityDescriptionエンティティ記述クラス(エンティティクラスを記述するためのもの) CoreDataデータベースフレームワークのコアオブジェクト NSPersistentStore:データ を格納するためにカプセル化された下位クラスの永続化ストレージ格納ファイル:データを格納管理するためのファイル1 NSSQLiteStoreType 2 NSBinaryStoreType 3 NSInMemoryStoreType 4 NSXMLStoreType. NSManagedObjectContext:管理対象コンテキストCoreDataでデータの操作と使用に使用され、アプリケーションとデータベース間の相互作用1データの保存にNSManagedObjectContextでsave操作2データを行う必要があるクエリNSManagedObjectContextでexecuteFetchRequest操作(戻り値は配列)3 CoreDataではオブジェクト関係マッピングが提供され、NSManagedObjectContext操作はNSManagedObjectオブジェクト である NSManagedObjectMode:管理対象オブジェクトモデル、管理対象オブジェクト NSManagedObject:管理対象オブジェクト、CoreDataが返すデータモデル、管理対象オブジェクトはエンティティ記述に基づいて生成された である. NSEntityDescription:エンティティ記述クラス、エンティティに基づいて管理対象オブジェクト を作成する Entity:エンティティクラス、エンティティはオブジェクトファイルデータの記述であり、管理対象オブジェクトはエンティティを表し、エンティティは名前、属性(フィールド)と関係を含み、エンティティの名前は通常、管理対象オブジェクト名と一致する である. NSFetchRequest:クエリ要求、NSManagedObject ContextはNSFetchRequestクエリデータに基づいて配列形式で返され、配列には管理対象オブジェクト(NSManagedObject) が含まれている NSSortDescriptor:ソート操作 CoreDataデータベースの簡単な操作
ステップ1:AppDelegateヘッダファイルの追加
ステップ2:プロトコルを単一の方法で取得
ステップ3:ソリッドオブジェクトの作成
ステップ4:添削
以下、CoreDataを簡単にカプセル化したコード(FMDBを使用)
CoreDataとSQLiteの比較
ステップ1:AppDelegateヘッダファイルの追加
#import "AppDelegate.h"
ステップ2:プロトコルを単一の方法で取得
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
ステップ3:ソリッドオブジェクトの作成
//. ( )
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:delegate.managedObjectContext];
ステップ4:添削
/** **/
// coreData ,
Person *person = [[Person alloc] initWithEntity:entity insertIntoManagedObjectContext:delegate.managedObjectContext];
//
person.name = @" ";
person.sex = @"nan";
person.age = 12;
[delegate saveContext];
/** **/
//
NSFetchRequest *request1 = [[NSFetchRequest alloc] init];
// //
request1.entity = entity;
// //
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 1"];
request1.predicate = predicate;
NSArray *array1 = [delegate.managedObjectContext executeFetchRequest:request1 error:nil];
for (Person *person2 in array1) {
[delegate.managedObjectContext deleteObject:person2];
NSLog(@"%@",person2.name);
}
[delegate saveContext];
/** **/
//
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//
request.entity = entity;
NSArray *array = [delegate.managedObjectContext executeFetchRequest:request error:nil];
for (Person *person1 in array) {
NSLog(@"%@",person1.name);
NSLog(@"%p",person1);
}
/** **/
//
NSFetchRequest *request2 = [[NSFetchRequest alloc] init];
request2.entity = entity;
//
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name = %@",@" "];
request2.predicate = predicate1;
NSArray *array2 = [delegate.managedObjectContext executeFetchRequest:request2 error:nil];
for (Person *person3 in array2) {
person3.name = @" ";
NSLog(@"%@",person3.name);
}
[delegate saveContext];
以下、CoreDataを簡単にカプセル化したコード(FMDBを使用)
#import
@interface FMDBHelp : NSObject
+ (FMDBHelp*)sharedFMDBHelp;
//
- (void)createDBWithName:(NSString*)dbName;
//
- (BOOL)notResultSetWithSql:(NSString*)sql;
//
- (NSArray*)qureyWithSql:(NSString*)sql;
@end
#import "FMDBHelp.h"
#import
@interface FMDBHelp ()
@property(nonatomic,strong)NSString *fileName;//
@property(nonatomic,strong)FMDatabase *database; //
@end
@implementation FMDBHelp
#pragma mark -
+ (FMDBHelp*)sharedFMDBHelp {
static FMDBHelp *help = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
help = [[FMDBHelp alloc] init];
});
return help;
}
#pragma mark -
- (void)createDBWithName:(NSString*)dbName {
if (dbName.length == 0) {
// nil NULL
self.fileName = @"";
} else {
//
if ([dbName containsString:@".sqlite"]) {
self.fileName = dbName;
} else {
self.fileName = [dbName stringByAppendingString:@".sqlite"];
}
}
}
#pragma amrk -
- (NSString*)dbPath {
// fileName
if (self.fileName.length) {
//
NSString *homePath = NSHomeDirectory();
//
NSString *savePath = [homePath stringByAppendingPathComponent:[NSString stringWithFormat:@"documents/%@",self.fileName]];
NSLog(@"%@",savePath);
return savePath;
} else {
return @"";
}
}
#pragma mark -
//
- (FMDatabase*)database {
if (!_database) {
_database = [FMDatabase databaseWithPath:[self dbPath]];
}
return _database;
}
#pragma mark -
- (BOOL)openOrCreateDB {
if ([self.database open]) {
NSLog(@" ");
return YES;
} else {
NSLog(@" ");
return NO;
}
}
#pragma mark -
- (BOOL)notResultSetWithSql:(NSString*)sql {
//
BOOL isOpen = [self openOrCreateDB];
if (isOpen) {
//
BOOL isSuccess = [self.database executeUpdate:sql];
[self closeDB];
NSLog(@" ");
return isSuccess;
} else {
NSLog(@" ");
return NO;
}
}
#pragma mark -
- (void)closeDB {
BOOL isClose = [self.database close];
if (isClose) {
NSLog(@" ");
} else {
NSLog(@" ");
}
}
#pragma mark -
- (NSArray*)qureyWithSql:(NSString*)sql {
//
BOOL isOpen = [self openOrCreateDB];
if (isOpen) {
//
FMResultSet *set = [self.database executeQuery:sql];
// ,
NSMutableArray *array = [NSMutableArray array];
// , , ,
while ([set next]) {
//
NSDictionary *dic = [set resultDictionary];
[array addObject:dic];
}
//
[set close];
[self closeDB];
return array;
} else {
NSLog(@" ");
return nil;
}
}