• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            @import url(http://m.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

            Core Data是個好東西,在數據儲存操作上速度快,容易操作,是一種類似關系數據庫的東西。但是有些不那么好學,那到底Core Data是怎么操作的呢?怎么用呢?怎么來編程呢?我們一起來學習吧,接下來使用蘋果提供的實例程序Locations來作分析:

            >程序介紹:

            右側是改程序的截圖,基本上來說就是通過使用Core Location來得到當時的位置,然后在點擊“+”的時候記錄下當時的經緯度。通過UITableViewController的功能來添加,編輯,刪除等功能。整體程序使用Core Data來儲存數據,實體(Entity)為一個位置,包括以下參數:1,時間(收集數據的時間)2,緯度,3,經度

            首先我們看看該程序的AppDelegate.h

            
            
            1. @interface LocationsAppDelegate : NSObject  {  
            2.     UIWindow *window;  
            3.     UINavigationController *navigationController; //導航欄  
            4.    
            5.     //以下定義了Core Data的三個決定性組建,等后面m文件里面再多介紹  
            6.     NSPersistentStoreCoordinator *persistentStoreCoordinator;  
            7.     NSManagedObjectModel *managedObjectModel;  
            8.     NSManagedObjectContext *managedObjectContext;  
            9. }  
            10.    
            11. @property (nonatomic, retain) IBOutlet UIWindow *window;  
            12. @property (nonatomic, retain) UINavigationController *navigationController;  
            13.    
            14. - (IBAction)saveAction:sender; //這個沒找到作用...根本就沒用到IB  
            15.    
            16. //還記得吧,nonatomic是因為這個程序是單線程  
            17. @property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;  
            18. @property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;  
            19. @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator  
            20.                               *persistentStoreCoordinator;  
            21. @property (nonatomic, readonly) NSString *applicationDocumentsDirectory;  
            22. //程序文檔目錄是主要為了給NSPersistentStoreCoordinator找個存SQLite文件的地方  
            23. @end  

            從上面的我們能看出來,該程序是通過一個根Core Data數據管理來管理整個程序的CoreData數據的,接下來看m文件也會對此作更多的理解。

            1. #import "LocationsAppDelegate.h"  
            2. #import "RootViewController.h" //該程序使用了一個根視圖控制器,所以導入了這個類  
            3. @implementation LocationsAppDelegate  
            4. @synthesize window;  
            5. @synthesize navigationController;  
            6.    
            7. - (void)applicationDidFinishLaunching:(UIApplication *)application {  
            8.     //初始化根視圖控制器,它是一個列表視圖控制器  
            9.     RootViewController *rootViewController = [[RootViewController alloc]  
            10.              initWithStyle:UITableViewStylePlain];  
            11.    
            12.     //通過下面的自定義getter得到CoreData的“被管理對象內容器”  
            13.     NSManagedObjectContext *context = [self managedObjectContext];  
            14.     if (!context) {  
            15.         // 如果getter出錯,在這里來排錯  
            16.     }  
            17.     rootViewController.managedObjectContext = context;  
            18.     //rootViewController有一個本地“被管理對象內容器”,在這里賦值過去  
            19.    
            20.     UINavigationController *aNavigationController = [[UINavigationController alloc]  
            21.              initWithRootViewController:rootViewController];  
            22.     self.navigationController = aNavigationController;  
            23.     //初始化導航欄,根視圖為rootViewController,并指定該導航欄為程序導航欄  
            24.     [window addSubview:[navigationController view]];  
            25.     [window makeKeyAndVisible];  
            26.    
            27.     //由于導航欄retain了根視圖,所以在這里可以release掉它了  
            28.     [rootViewController release];  
            29.     //由于self已經retain了導航欄,所以導航欄可以release  
            30.     [aNavigationController release];  
            31. }  
            32.    
            33. //applicationWillTerminate: 在程序結束前,Core Data會保存任何對其的更改  
            34. - (void)applicationWillTerminate:(UIApplication *)application {  
            35.    
            36.     NSError *error;  
            37.     if (managedObjectContext != nil) {  
            38.         if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {  
            39.             // Handle the error.  
            40.         }  
            41.     }  
            42. }  
            43.    
            44. //在得到點擊事件后,保存更改  
            45. - (IBAction)saveAction:(id)sender {  
            46.    
            47.     NSError *error;  
            48.     if (![[self managedObjectContext] save:&error]) {  
            49.         // Handle error  
            50.     }  
            51. }  
            52.    
            53. //自定義的managedObjectContext的getter, 它其實是真正在使用的時候的被操作對象  
            54. - (NSManagedObjectContext *) managedObjectContext {  
            55.    
            56.     //如果已經有這個對象,就直接返回,否則繼續  
            57.     if (managedObjectContext != nil) {  
            58.         return managedObjectContext;  
            59.     }  
            60.    
            61.     NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];  
            62.     if (coordinator != nil) {  
            63.         managedObjectContext = [[NSManagedObjectContext alloc] init];  
            64.         [managedObjectContext setPersistentStoreCoordinator: coordinator];  
            65.        //這里可以看到,“內容管理器”和“數據一致性存儲器”的關系,  
            66.        //managedObjectContext需要得到這個“數據一致性存儲器”  
            67.     }  
            68.     return managedObjectContext;  
            69. }  
            70.    
            71. //自定義的CoreData數據模板的getter,數據模板其實就是一個描述實體與實體的關系  
            72. //,類似于關系型數據庫的關系描述文件  
            73. - (NSManagedObjectModel *)managedObjectModel {  
            74.    
            75.     if (managedObjectModel != nil) {  
            76.         return managedObjectModel;  
            77.     }  
            78.     managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  
            79.     //從本地所有xcdatamodel文件得到這個CoreData數據模板  
            80.     return managedObjectModel;  
            81. }  
            82.    
            83. //自定義“數據一致性存儲器” persistentStoreCoordinator的getter  
            84. - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {  
            85.    
            86.     if (persistentStoreCoordinator != nil) {  
            87.         return persistentStoreCoordinator;  
            88.     }  
            89.    
            90.     //定義一個本地地址到NSURL,用來存儲那個SQLite文件  
            91.     NSURL *storeUrl = [NSURL fileURLWithPath:  
            92.             [[self applicationDocumentsDirectory]  
            93.                             stringByAppendingPathComponent: @"Locations.sqlite"]];  
            94.    
            95.     NSError *error;  
            96.     persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]  
            97.             initWithManagedObjectModel: [self managedObjectModel]];  
            98.     //從這里可以看出,其實persistentStoreCoordinator需要的不過是一個  
            99.     //存儲數據的位置,它是負責管理CoreData如何儲存數據的  
            100.     if (![persistentStoreCoordinator  
            101.         addPersistentStoreWithType:NSSQLiteStoreType  
            102.         configuration:nil  
            103.         URL:storeUrl  
            104.         options:nil  
            105.         error:&error]) {  
            106.         // Handle the error.  
            107.     }      
            108.    
            109.     return persistentStoreCoordinator;  
            110. }  
            111.    
            112. //返回該程序的檔案目錄,用來簡單使用  
            113. - (NSString *)applicationDocumentsDirectory {  
            114.    
            115.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  
            116.                             NSUserDomainMask, YES);  
            117.     NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;  
            118.     return basePath;  
            119.     //我原來的帖子中介紹過,方法其實是一模一樣的  
            120. }  
            121.    
            122. - (void)dealloc {  
            123.    
            124.     //釋放內存  
            125.     [managedObjectContext release];  
            126.     [managedObjectModel release];  
            127.     [persistentStoreCoordinator release];  
            128.    
            129.     [navigationController release];  
            130.     [window release];  
            131.     [super dealloc];  
            132. }  
            133. @end  

            從上面的程序主代理文件可以看出,CoreData的簡單使用不過是通過三個組建。

            NSManagedObjectModel來描述實體與實體的關系,也就是類似于表和表的關系。
            NSManagedObjectContext來得到被儲存內容的文件管理器,對數據作直接操作
            NSPersistentStoreCoordinator來管理數據的儲存位置,儲存方法(SQLite)

            你對Core Data理解更多了么?

             

             

             

            1. @interface LocationsAppDelegate : NSObject  {  
            2.     UIWindow *window;  
            3.     UINavigationController *navigationController; //導航欄  
            4.    
            5.     //以下定義了Core Data的三個決定性組建,等后面m文件里面再多介紹  
            6.     NSPersistentStoreCoordinator *persistentStoreCoordinator;  
            7.     NSManagedObjectModel *managedObjectModel;  
            8.     NSManagedObjectContext *managedObjectContext;  
            9. }  
            10.    
            11. @property (nonatomic, retain) IBOutlet UIWindow *window;  
            12. @property (nonatomic, retain) UINavigationController *navigationController;  
            13.    
            14. - (IBAction)saveAction:sender; //這個沒找到作用...根本就沒用到IB  
            15.    
            16. //還記得吧,nonatomic是因為這個程序是單線程  
            17. @property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;  
            18. @property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;  
            19. @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator  
            20.                               *persistentStoreCoordinator;  
            21. @property (nonatomic, readonly) NSString *applicationDocumentsDirectory;  
            22. //程序文檔目錄是主要為了給NSPersistentStoreCoordinator找個存SQLite文件的地方  
            23. @end  
            From: http://blog.csdn.net/usxue/article/details/5011447
            posted on 2011-12-07 08:49 逛奔的蝸牛 閱讀(997) 評論(0)  編輯 收藏 引用 所屬分類: Cocoa
            国产精品久久久久久| 国产毛片久久久久久国产毛片| 午夜视频久久久久一区 | 国产精品久久久久久五月尺| 久久精品国产只有精品66| 人妻无码精品久久亚瑟影视| 久久久久亚洲AV无码麻豆| 精品国产一区二区三区久久蜜臀| 伊人色综合久久天天人守人婷| 国产精品美女久久久久| 亚洲AⅤ优女AV综合久久久| 国产精品久久久久久搜索| 无码精品久久一区二区三区 | 深夜久久AAAAA级毛片免费看| 亚洲AV无码成人网站久久精品大| 丁香狠狠色婷婷久久综合| 精品国产乱码久久久久久呢| 91久久福利国产成人精品| 久久精品www人人爽人人| 蜜桃麻豆www久久国产精品| 热久久这里只有精品| 蜜臀久久99精品久久久久久小说 | 狠狠色丁香婷婷久久综合| 99久久99久久久精品齐齐 | 久久亚洲精品成人AV| 2021国产精品午夜久久 | 久久精品中文字幕一区| 色综合久久88色综合天天| 色综合久久综合中文综合网| 天堂无码久久综合东京热| 国产福利电影一区二区三区,免费久久久久久久精 | 久久综合狠狠综合久久| 久久久久久久波多野结衣高潮| 久久久久久久国产免费看| 99久久国产综合精品五月天喷水| 91精品国产乱码久久久久久| 久久亚洲私人国产精品| 久久国产精品无码HDAV| 97久久精品人妻人人搡人人玩| 国产亚洲精品美女久久久| 成人久久精品一区二区三区|