• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • CloudKit快速入門之02 通過保存記錄創建數據庫架構 (SwiftUI iCloud CloudKit中文文檔手冊教程)...

    標簽: 數據庫  python  java  mysql  大數據

    通過保存記錄創建數據庫架構

    在開發過程中,使用CloudKit API創建架構很容易。將記錄對象保存到數據庫時,將自動為您創建關聯的記錄類型及其字段。此功能稱為即時模式,僅當您使用開發環境(商店中出售的應用程序無法訪問)時才可用。例如,在開發過程中,您可以使用存儲在屬性列表中的測試記錄填充CloudKit數據庫。

    本章介紹一些CloudKit API,并包含代碼片段。#import <CloudKit/CloudKit.h>在每個使用CloudKit類和方法的實施文件的頂部添加。閱讀Cloud Kit Framework Reference,以獲取有關CloudKit API的詳細信息。

    關于設計架構

    設計CloudKit模式,以存儲要保留的應用程序對象模型的各個部分。如果要從頭開始實現應用程序,請使用Model-View-Controller設計模式將用戶界面視圖與模型對象分開。然后設計一個架構,以有效地存儲要存儲在iCloud中的對象模型的各個部分。

    將數據分為記錄類型

    CloudKit架構由一個或多個具有名稱,字段和其他元數據的記錄類型組成。字段類型與允許的屬性列表類型相似,但有一些補充。Asset對于與記錄分開存儲的大容量數據,請使用特殊的類型;Location對于有效查詢地理坐標的類型,請使用一種特殊的類型;對于記錄之間Reference的一對一和一對多的關系,請使用一種特殊的類型。一條記錄的最大大小為1MB,因此對于大數據,請使用該Asset類型(而不是該Bytes類型)。

    該表顯示了可能出現的字段類型(與它們在CloudKit儀表板中一樣)以及它們等效的CloudKit框架類。

    截屏2020-08-11 下午4.00.58.png

    使用這些字段設計記錄類型以存儲應用程序的持久數據。例如,此主從細節用戶界面的草圖在主界面(左側的列)中顯示了藝術品標題的集合,在詳細信息界面(右側的區域)中顯示了所選藝術品的屬性。

    截屏2020-08-11 下午4.01.06.png

    在代碼中,基礎對象模型由Artwork和Artist類組成,其中和Artwork具有一對一的關系Artist。

    在模式中,此對象模型中的對象與記錄類型Artwork和之間存在一對一的映射Artist。記錄類型的artist字段是具有對Artwork記錄的引用的引用類型Artist。該image字段是Asset包含URL 的類型,并且該location字段是Location具有經度和緯度屬性的類型。在所有其他領域Artwork,并Artist是簡單的String和Date類型。

    截屏2020-08-11 下午4.01.14.png

    確定記錄名稱

    確定為您的記錄創建唯一名稱的啟發式方法。的記錄名稱加上一個記錄區(一個數據庫的一個分區)是記錄標識符,它表示一個記錄在數據庫中的位置。記錄名稱可以是另一個數據源使用的外鍵,也可以是使其在記錄區域內唯一的字符串組合。例如,記錄的記錄名稱Artwork可以將藝術家的名字和姓氏與目錄號結合在一起,如string所示115 Chen, Mei。如果您使用CloudKit儀表板創建記錄,則會為該記錄自動分配一個唯一ID。

    以編程方式創建記錄

    首先創建一個記錄標識符,[CKRecordID](https://developer.apple.com/documentation/cloudkit/ckrecordid)該類的實例,指定記錄名稱和記錄區域。然后創建一條記錄,[CKRecord](https://developer.apple.com/documentation/cloudkit/ckrecord)該類的實例,并傳遞記錄標識符。使用鍵值編碼樣式方法設置記錄的字段。

    用代碼創建記錄

    1. 創建一個指定唯一記錄名稱的記錄ID
    let artworkRecordID = CKRecordID(recordName: "115")
    CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:@"115"];
    1. 創建一個記錄對象。
    let artworkRecord = CKRecord(recordType: "Artwork", recordID: artworkRecordID)
    CKRecord *artworkRecord = [[CKRecord alloc] initWithRecordType:@"Artwork" recordID:artworkRecordID];
    1. 設置記錄內容
    artworkRecord["title"] = "MacKerricher State Park" as NSString
    artworkRecord["artist"] = "Mei Chen" as NSString
    artworkRecord["address"] = "Fort Bragg, CA" as NSString
    artworkRecord[@"title" ] = @"MacKerricher State Park";
    artworkRecord[@"artist"] = @"Mei Chen";
    artworkRecord[@"address"] = @"Fort Bragg, CA";

    保存記錄

    首先選擇一個數據庫,您將在其中保存記錄(公共,私有或自定義),然后保存記錄。如果該記錄不存在記錄類型,則會為您創建。

    保存記錄

    在應用程序的默認容器中獲取數據庫。
    要獲取公共數據庫:

    獲得公共數據庫

    let myContainer = CKContainer.default()
    let publicDatabase = myContainer.publicCloudDatabase
    CKContainer *myContainer = [CKContainer defaultContainer];
    CKDatabase *publicDatabase = [myContainer publicCloudDatabase];

    獲得個人數據庫

    let myContainer = CKContainer.default()
    let privateDatabase = myContainer.privateDatabase
    CKContainer *myContainer = [CKContainer defaultContainer];
    CKDatabase *privateDatabase = [myContainer privateCloudDatabase];

    獲得自定義容器

    let myContainer = CKContainer(identifier: "iCloud.com.example.ajohnson.GalleryShared")
    CKContainer *myContainer = [CKContainer containerWithIdentifier:@"iCloud.com.example.ajohnson.GalleryShared"];

    要創建由多個應用共享的自定義容器,請閱讀在應用之間共享容器

    1. 保存記錄。
    publicDatabase.save(artworkRecord) {
        (record, error) in
        if let error = error {
            // Insert error handling
            return
        }
        // Insert successfully saved record code
    }
    [publicDatabase saveRecord:artworkRecord completionHandler:^(CKRecord *artworkRecord, NSError *error){
       if (error) {
          // Insert error handling
          return
       }
       // Insert successfully saved record code
    }];

    在運行應用程序之前輸入iCloud憑據

    在開發中,當您在模擬器或設備上通過Xcode運行應用程序時,需要輸入iCloud憑據才能讀取公共數據庫中的記錄。在生產中,默認權限允許未經身份驗證的用戶讀取公共數據庫中的記錄,但不允許他們寫入記錄。

    因此,在運行應用程序并將記錄保存到數據庫之前,請在iOS的“設置”或Mac的“系統偏好設置”中輸入iCloud帳戶。同時啟用iCloud Drive。稍后,編寫必要的錯誤處理,以在需要iCloud憑據時向用戶顯示對話框,如提醒用戶輸入iCloud憑據中所述

    要在iOS模擬器中運行您的應用程序,請在選擇模擬器之前在iOS模擬器中輸入iCloud憑據,然后單擊Xco??de中的“運行”按鈕。您需要對在Xcode的“方案”彈出菜單中選擇的每個iOS模擬器執行這些步驟。

    在iOS模擬器中輸入iCloud憑據

    1. 選擇“ Xcode”>“打開開發者工具”>“ iOS模擬器”。
    2. 在iOS模擬器中,選擇“硬件”>“主頁”。
    3. 啟動設置應用程序,然后單擊iCloud。
    截屏2020-08-11 下午4.46.30.png
    1. 輸入一個Apple ID和密碼。

    2. 單擊登錄。

      等待iOS驗證iCloud帳戶。

    3. 要啟用iCloud Drive,請單擊iCloud Drive開關。

      如果未出現該開關,則說明已啟用iCloud Drive。

    有關如何創建iCloud帳戶的信息,請閱讀創建用于開發的iCloud帳戶

    提醒用戶輸入iCloud憑據
    通過在保存記錄之前驗證用戶已登錄其iCloud帳戶來改善用戶的體驗。如果用戶未登錄,則顯示警報,指示用戶如何輸入其iCloud憑據并啟用iCloud Drive。在else下面的子句中插入保存記錄的代碼。

    [[CKContainer defaultContainer] accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError *error) {
        if (accountStatus == CKAccountStatusNoAccount) {
            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Sign in to iCloud"
                                                                           message:@"Sign in to your iCloud account to write records. On the Home screen, launch Settings, tap iCloud, and enter your Apple ID. Turn iCloud Drive on. If you don't have an iCloud account, tap Create a new Apple ID."
                                                                    preferredStyle:UIAlertControllerStyleAlert];
            [alert addAction:[UIAlertAction actionWithTitle:@"Okay"
                                                      style:UIAlertActionStyleCancel
                                                    handler:nil]];
            [self presentViewController:alert animated:YES completion:nil];
        }
        else {
            // Insert your just-in-time schema code here
        }
    }];

    要了解保存記錄時可能發生的錯誤,請閱讀CloudKit Framework Constants Reference

    運行您的應用

    在Xcode中,運行您的應用程序以執行保存記錄并在數據庫中創建架構的代碼。

    驗證您的步驟

    使用CloudKit儀表板來驗證記錄類型是否已添加到架構以及記錄是否已添加到數據庫。

    使用CloudKit儀表板查看記錄類型

    驗證記錄類型具有正確的字段名稱和類型。

    查看記錄類型

    1. 登錄到CloudKit儀表板

    2. 從列表中選擇您的應用程序使用的容器。

    3. 在開發或生產環境中選擇數據。

    4. 在標簽欄中,單擊“記錄類型”。

    5. 選擇一種記錄類型。

      字段名稱和類型顯示在右側的詳細信息區域中。

    截屏2020-08-11 下午4.49.13.png
    1. Users出現的記錄類型是保留的系統記錄類型,無法刪除,但是可以向其添加字段。

    在查看記錄之前啟用RecordName索引

    默認情況下,禁用使用即時模式創建的記錄類型的所有元數據索引。需要啟用recordName查詢索引以查看CloudKit儀表板中的關聯記錄。

    啟用recordName查詢索引

    1. 在標簽欄中,單擊“索引”,然后選擇一種記錄類型。

    2. 單擊添加索引,然后選擇recordName字段。

    3. 單擊保存記錄類型。

    使用CloudKit儀表板查看記錄

    驗證保存的記錄是否包含所有數據。

    查看記錄

    1. CloudKit儀表板的標簽欄中,單擊“記錄”。

    2. 通過添加過濾器或排序條件來定義查詢。

    3. 單擊查詢記錄。

    4. 在第二列中,選擇一個recordName。

      記錄鍵值對顯示在右側的詳細信息區域中

    截屏2020-08-11 下午4.49.48.png

    技術交流

    QQ:3365059189
    SwiftUI技術交流QQ群:518696470

    版權聲明:本文為iCloudEnd原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/iCloudEnd/article/details/107952705

    智能推薦

    iCloud

    iCloud 一旦你的app通過UIDocument進行操作,那么iCloud服務會讓你更滿意。你只需要兩步接入iCloud服務: 注冊使用iCloud的資格 在蘋果開發者網站,注冊你的App ID ,勾選啟用iCloud,并生成對應的provisioning profile文件,下載下來雙擊: 然后在項目工程中,勾選使用iCloud服務: 獲取一個兼容iCloud的目錄 在你app啟動時,在后臺...

    SwiftUI Cloudkit Coredata 入門教程一篇文章搞定云存儲

    實戰需求 云同步是現代App必備的功能,如何實現云存儲呢? 這個問題要是放到10年錢,大概組織幾十人的團隊,投入上千萬才能實現這個功能。如今我們卻可以一個人幾分鐘就實現如此強大功能。 image.png 項目最終效果 截屏2020-08-15 下午9.43.37.png 需要工具 1、xcode 需要11.6以后 2、iOS 13 以后 3、macOS 10.15之后,建議11 4、開發者賬號 基...

    SwiftUI Cloudkit Coredata 入門教程一篇文章搞定云存儲(教程含源碼)

    實戰需求 云同步是現代App必備的功能,如何實現云存儲呢? 這個問題要是放到10年錢,大概組織幾十人的團隊,投入上千萬才能實現這個功能。如今我們卻可以一個人幾分鐘就實現如此強大功能。 項目最終效果 需要工具 1、xcode 需要11.6以后 2、iOS 13 以后 3、macOS 10.15之后,建議11 4、開發者賬號 基礎知識(可以跳過,運行完項目后在閱讀) @FetchRequest 一種屬...

    SwiftUI入門

    摘要 這篇分享的內容是關于SwiftUI的一些知識,主要分為以下幾個方面:SwiftUI的概念和用法;WWDC 20大會上對swiftUI的更新介紹;SwiftUI在開發應用中的優缺點分析以及它和我們目前開發中使用的UIKit的比較;SwiftUI的發展前景等。 前景 從以下數據可以看出,未來swift將是iOS開發的唯一選擇,越早進行相關的遷移工作會對未來公司的發展越有利: 從 WWDC17 后...

    UITabBar Appkit (SwiftUI Appkit中文手冊文檔)

    UITabBar 一種控件,在選項卡欄中顯示一個或多個按鈕,用于在應用程序中的不同子任務,視圖或模式之間進行選擇。 總覽 通常,您可以將選項卡欄與對象結合使用,但也可以將其用作應用程序中的獨立控件。標簽欄始終出現在屏幕的底部邊緣,并顯示一個或多個對象的內容。可以使用背景圖像或淡色自定義選項卡欄的外觀,以適合您的界面需求。點按一個項目會選中并突出顯示該項目,然后您可以使用對項目的選擇來為您的應用啟用...

    猜你喜歡

    SwiftUI 中級之List顯示Sqlite數據庫內容(2020年教程)

    SwiftUI 中級之List顯示Sqlite數據庫內容(2020年教程) 數據介紹 我們手動創建一個landmark.db 文件,其包含一個landmark表。表內容如下圖 SwiftUI 中級之List顯示Sqlite數據庫內容 csv文件 屬性 純Swift代碼 可以自定義table名稱 使用SwiftUI進行顯示 使用方法 如何加入到你到項目 (1) copy file to your p...

    OpenSSL中文手冊之BIO庫詳解

      版權聲明:本文根據DragonKing牛,E-Mail:[email protected]發布在https://openssl.126.com的系列文章整理修改而成(這個網站已經不能訪問了),我自己所做的工作主要是針對新的1.0.2版本進行驗證,修改錯別字,和錯誤,重新排版,以及整理分類,配圖。 未經作者允許,嚴禁用于商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡