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ヘッダファイルの追加
    #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;
        }
    }